home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / msdos / mxmenu.zip / MARXMENU.DOC < prev    next >
Text File  |  1993-07-15  |  522KB  |  15,410 lines

  1.     
  2.     
  3.     
  4.     
  5.     
  6.      
  7.     
  8.      ===================================================================
  9.     
  10.     
  11.                        <*> Computer Tyme MarxMenu <*>
  12.     
  13.                               Reference Manual
  14.     
  15.                     Copyright 1989 - 1993 by Marc Perkel
  16.     
  17.          All Rights Reserved * Version 2.44 * Release Date: 07-08-93
  18.     
  19.      Computer Tyme * 411 North Sherman Suite 300 * Springfield, MO 65802
  20.     
  21.                   (417) 866-1222 voice * (417) 866-1665 bbs
  22.     
  23.                              Fax: (417) 866-0135
  24.     
  25.                             CompuServe: 71333,427
  26.     
  27.                               MHS: Marc @ CTyme
  28.     
  29.                   Internet: Marc @ CTyme.MHS.Compuserve.com
  30.     
  31.      ===================================================================
  32.     
  33.  
  34.     Computer Tyme * MarxMenu * Table of Contents            Page #1
  35.     -----------------------------------------------------------------
  36.     
  37.       Copyright .............................................. 1
  38.       License Agreement ...................................... 1
  39.       MarxMenu Trademarks .................................... 3
  40.       Technical Support ...................................... 3
  41.       Installation ........................................... 4
  42.       Getting Started Quick .................................. 6
  43.       Use MarxHelp ........................................... 8
  44.       Common Questions and Mistakes .......................... 8
  45.       MarxMenu Features ...................................... 12
  46.       Overview of the MarxMenu System ........................ 13
  47.       What MarxMenu Does ..................................... 15
  48.       The MARX.BAT File ...................................... 15
  49.       DROPTO.BAT ............................................. 18
  50.       Support for early DOS versions ......................... 19
  51.       About Environment Variables ............................ 20
  52.       Dealing with Multiple DOS Shells ....................... 21
  53.       MarxMenu and TSR Control ............................... 22
  54.       Network Users .......................................... 22
  55.       Network Menu Strategy .................................. 23
  56.       Using TRUENAME on Networks ............................. 24
  57.       Novell Users ........................................... 24
  58.       The Novell Menu Translator ............................. 25
  59.       Logging out under Menu Control ......................... 26
  60.       Logging in with MarxMenu ............................... 27
  61.       Using Novell's Login ................................... 27
  62.       The CONFIG.SYS File .................................... 28
  63.       The AUTOEXEC.BAT File .................................. 29
  64.       Using a Menu File to Log In ............................ 30
  65.       Novell Search Drives ................................... 31
  66.       Novell Drive Mapping Tricks ............................ 32
  67.       Setting File Attributes ................................ 32
  68.       Novell Semaphores ...................................... 33
  69.       Using Semaphores for Software Metering ................. 34
  70.       NetWare MHS & MarxMenu ................................. 34
  71.       Upgrading MarxMenu ..................................... 35
  72.       Customizing MarxMenu Sample Files ...................... 36
  73.       Menu Analysis .......................................... 37
  74.       Onkey Statements ....................................... 37
  75.       Popup Menus ............................................ 39
  76.       The Console ............................................ 40
  77.       Repositioning the Top Window ........................... 40
  78.       Mouse Support .......................................... 41
  79.       Starting off the Easy Way .............................. 41
  80.       About Variables ........................................ 41
  81.       Numeric Variables ...................................... 42
  82.       Boolean Variables ...................................... 43
  83.       String Variables ....................................... 43
  84.       Real Numbers ........................................... 43
  85.       Local Variables ........................................ 44
  86.       Dates .................................................. 44
  87.       Passing Parameters to Procedures ....................... 45
  88.       About Constants ........................................ 46
  89.       About Arrays ........................................... 47
  90.       About Qualifiers ....................................... 47
  91.       Pointer Variables ...................................... 49
  92.  
  93.     Computer Tyme * MarxMenu * Table of Contents            Page #2
  94.     -----------------------------------------------------------------
  95.     
  96.       Comments in Menu Files ................................. 49
  97.       The MarxMenu Compiler .................................. 50
  98.       MarxMenu Language Rules ................................ 50
  99.       Compiler Compatibility ................................. 51
  100.       A word about DOS versions .............................. 51
  101.       A word about BUGS ...................................... 52
  102.       Tips From the Master ................................... 52
  103.       Computers do Simple Tasks .............................. 53
  104.       Complex Tasks are made of Simple Tasks ................. 53
  105.       Learning Good Programming Habits ....................... 54
  106.       Use Long Names ......................................... 54
  107.       Use Comments Liberally ................................. 56
  108.       Indent Your code ....................................... 57
  109.       For Duplicate Tasks, Use Procedures .................... 57
  110.       Don't Program Yourself into a Corner ................... 58
  111.       For the POWER User ..................................... 58
  112.       Where MarxMenu is Heading .............................. 59
  113.       A word to Writers and Reviewers ........................ 60
  114.       Security Issues ........................................ 61
  115.       Keeping Users in the Menu .............................. 62
  116.       Using BREAK.SYS ........................................ 62
  117.       Using the SHELL= Command ............................... 63
  118.       Conditional Statements ................................. 64
  119.       Environment Variables used by MarxMenu ................. 65
  120.       MarxMenu DataBase Functions ............................ 66
  121.       Additional Information ................................. 67
  122.       Computer Tyme on Compuserve ............................ 67
  123.       MarxMenu Commands ...................................... 68
  124.       | ...................................................... 69
  125.       ( ...................................................... 69
  126.       ) ...................................................... 69
  127.       * ...................................................... 69
  128.       + ...................................................... 70
  129.       - ...................................................... 70
  130.       / ...................................................... 70
  131.       < ...................................................... 70
  132.       <= ..................................................... 71
  133.       <> ..................................................... 71
  134.       = ...................................................... 71
  135.       > ...................................................... 71
  136.       >= ..................................................... 72
  137.       Abs .................................................... 72
  138.       Actual ................................................. 72
  139.       Alias .................................................. 72
  140.       AllowAbort ............................................. 73
  141.       AllowEsc ............................................... 73
  142.       And .................................................... 73
  143.       AnsiWindows ............................................ 73
  144.       AppendArray ............................................ 74
  145.       ApplicationMemory ...................................... 74
  146.       ArcTan ................................................. 74
  147.       ArrayInsert ............................................ 74
  148.       AssignList ............................................. 75
  149.       BadDate ................................................ 75
  150.       Bat .................................................... 75
  151.  
  152.     Computer Tyme * MarxMenu * Table of Contents            Page #3
  153.     -----------------------------------------------------------------
  154.     
  155.       BatFileName ............................................ 76
  156.       BigShadow .............................................. 76
  157.       BinString .............................................. 76
  158.       BiosDate ............................................... 76
  159.       Blanked ................................................ 76
  160.       BlankMessage ........................................... 77
  161.       BlankScreenProgram ..................................... 77
  162.       BlankTime .............................................. 78
  163.       Blink .................................................. 78
  164.       BlockBox ............................................... 79
  165.       BootDrive .............................................. 79
  166.       BoxBorderColor ......................................... 79
  167.       BoxHeader .............................................. 79
  168.       BoxHeaderColor ......................................... 80
  169.       BoxHeaderLeft .......................................... 80
  170.       BoxHeaderRight ......................................... 80
  171.       BoxFooter .............................................. 81
  172.       BoxFooterLeft .......................................... 81
  173.       BoxFooterRight ......................................... 81
  174.       BoxInsideColor ......................................... 82
  175.       Break .................................................. 82
  176.       BrightBackground ....................................... 82
  177.       BtrvAbortTransaction ................................... 83
  178.       BtrvBeginTransaction ................................... 83
  179.       BtrvClearOwner ......................................... 83
  180.       BtrvClose .............................................. 83
  181.       BtrvCreate ............................................. 84
  182.       BtrvDelete ............................................. 86
  183.       BtrvEndTransaction ..................................... 86
  184.       BtrvGetEqual ........................................... 87
  185.       BtrvGetFirst ........................................... 87
  186.       BtrvGetGreater ......................................... 88
  187.       BtrvGetGreaterOrEqu .................................... 88
  188.       BtrvGetLast ............................................ 88
  189.       BtrvGetLess ............................................ 89
  190.       BtrvGetLessOrEqu ....................................... 90
  191.       BtrvGetNext ............................................ 90
  192.       BtrvGetPrev ............................................ 90
  193.       BtrvIndexes ............................................ 91
  194.       BtrvInsert ............................................. 91
  195.       BtrvOpen ............................................... 91
  196.       BtrvPageSize ........................................... 92
  197.       BtrvRecLen ............................................. 92
  198.       BtrvRecords ............................................ 92
  199.       BtrvReset .............................................. 92
  200.       BtrvResult ............................................. 93
  201.       BtrvResultMessage ...................................... 94
  202.       BtrvSetOwner ........................................... 94
  203.       BtrvStepFirst .......................................... 94
  204.       BtrvStepLast ........................................... 95
  205.       BtrvStepNext ........................................... 95
  206.       BtrvStepPrev ........................................... 96
  207.       BtrvStop ............................................... 96
  208.       BtrvUnUsedPages ........................................ 96
  209.       BtrvUpdate ............................................. 97
  210.  
  211.     Computer Tyme * MarxMenu * Table of Contents            Page #4
  212.     -----------------------------------------------------------------
  213.     
  214.       BtrvVersion ............................................ 97
  215.       BuildPath .............................................. 97
  216.       CancelListEntry ........................................ 98
  217.       CapFirstChar ........................................... 98
  218.       CapsColor .............................................. 98
  219.       CapsLock ............................................... 99
  220.       Chain .................................................. 99
  221.       Char ................................................... 99
  222.       ChDir .................................................. 99
  223.       CleanFileName .......................................... 100
  224.       ClearKbdBuffer ......................................... 100
  225.       ClearKeyEvents ......................................... 100
  226.       ClearLine .............................................. 100
  227.       ClearScreen ............................................ 101
  228.       ClearScreenFirst ....................................... 101
  229.       ClearScreenOnExit ...................................... 101
  230.       ClockColor ............................................. 101
  231.       ClockMode .............................................. 102
  232.       ClockPos ............................................... 102
  233.       ClosePrinter ........................................... 103
  234.       ClusterSize ............................................ 103
  235.       CmdLine ................................................ 103
  236.       CMOS ................................................... 104
  237.       ColdBoot ............................................... 104
  238.       ColorScreen ............................................ 104
  239.       ComBaud ................................................ 104
  240.       ComBlockErrors ......................................... 105
  241.       ComBlockNumber ......................................... 105
  242.       ComBlockSize ........................................... 105
  243.       ComBreakReceived ....................................... 105
  244.       ComBytesRemaining ...................................... 105
  245.       ComBytesTransferred .................................... 106
  246.       ComCD .................................................. 106
  247.       ComCDAbort ............................................. 106
  248.       ComCharReady ........................................... 106
  249.       ComDataBits ............................................ 106
  250.       ComDonePort ............................................ 107
  251.       ComDrainSendBuffer ..................................... 107
  252.       ComDTR ................................................. 107
  253.       ComEchoRecChar ......................................... 107
  254.       ComEchoSendChar ........................................ 107
  255.       ComEmptyRecBuffer ...................................... 108
  256.       ComEmptySendBuffer ..................................... 108
  257.       ComErrorLimit .......................................... 108
  258.       ComFileName ............................................ 108
  259.       ComFileSize ............................................ 108
  260.       ComInitPort ............................................ 109
  261.       ComLastChar ............................................ 109
  262.       ComLastLine ............................................ 109
  263.       ComNewLineProgram ...................................... 109
  264.       ComParity .............................................. 110
  265.       ComPort ................................................ 110
  266.       ComProtocol ............................................ 110
  267.       ComReadChar ............................................ 110
  268.       ComReadln .............................................. 111
  269.  
  270.     Computer Tyme * MarxMenu * Table of Contents            Page #5
  271.     -----------------------------------------------------------------
  272.     
  273.       ComReadTimeout ......................................... 111
  274.       ComRec1kXmodem ......................................... 111
  275.       ComRecKermit ........................................... 111
  276.       ComRecXmodem ........................................... 112
  277.       ComRecYmodem ........................................... 112
  278.       ComRecYmodemG .......................................... 112
  279.       ComRecZmodem ........................................... 112
  280.       ComResult .............................................. 113
  281.       ComRI .................................................. 113
  282.       ComRTS ................................................. 113
  283.       ComSendBreak ........................................... 113
  284.       ComSend1kXmodem ........................................ 113
  285.       ComSendKermit .......................................... 114
  286.       ComSendXmodem .......................................... 114
  287.       ComSendYmodem .......................................... 114
  288.       ComSendYmodemG ......................................... 115
  289.       ComSendZmodem .......................................... 115
  290.       ComStopBits ............................................ 115
  291.       ComStripHighBit ........................................ 116
  292.       ComThisLine ............................................ 116
  293.       ComTimeout ............................................. 116
  294.       ComTotalErrors ......................................... 116
  295.       ComUseInt14 ............................................ 117
  296.       ComUseUart ............................................. 117
  297.       ComWatchCD ............................................. 117
  298.       ComWrite ............................................... 117
  299.       ComWriteln ............................................. 118
  300.       ComWriteTimeout ........................................ 118
  301.       ComXmitAbortProgram .................................... 118
  302.       ComXmitEnding .......................................... 118
  303.       ComXmitStarting ........................................ 119
  304.       ComXmitStatusProgram ................................... 119
  305.       Comment ................................................ 119
  306.       Console ................................................ 119
  307.       ConsoleBorderColor ..................................... 120
  308.       ConsoleHeaderColor ..................................... 120
  309.       ConsoleInsideColor ..................................... 120
  310.       ConsolePos ............................................. 120
  311.       Const .................................................. 120
  312.       Cos .................................................... 121
  313.       CountryCode ............................................ 121
  314.       CpuClass ............................................... 121
  315.       CpuName ................................................ 121
  316.       CurrencySymbol ......................................... 122
  317.       CurrentDirectory ....................................... 122
  318.       CurrentEnvironment ..................................... 122
  319.       CurrentWindow .......................................... 122
  320.       Cursor ................................................. 122
  321.       CustomBox .............................................. 123
  322.       DateSeparator .......................................... 123
  323.       DateString ............................................. 123
  324.       Day .................................................... 123
  325.       DayOf .................................................. 123
  326.       DayOfWeek .............................................. 124
  327.       DayOfWeekOf ............................................ 124
  328.  
  329.     Computer Tyme * MarxMenu * Table of Contents            Page #6
  330.     -----------------------------------------------------------------
  331.     
  332.       DecimalSeparator ....................................... 124
  333.       Delete ................................................. 124
  334.       DelFile ................................................ 125
  335.       Devices ................................................ 125
  336.       DirectoriesOnly ........................................ 126
  337.       DisplayType ............................................ 126
  338.       DiskType ............................................... 126
  339.       Dispose ................................................ 127
  340.       DosVersion ............................................. 127
  341.       DosVersionString ....................................... 127
  342.       DosWindow .............................................. 128
  343.       DoubleLineBox .......................................... 128
  344.       DPMIInstalled .......................................... 128
  345.       DPMIVersion ............................................ 128
  346.       DrawBox ................................................ 128
  347.       Drives ................................................. 129
  348.       DriveType .............................................. 129
  349.       DvAppNumber ............................................ 129
  350.       DvFrame ................................................ 130
  351.       DvFreeze ............................................... 130
  352.       DvHide ................................................. 130
  353.       DvKillTask ............................................. 130
  354.       DvLastHandle ........................................... 130
  355.       DvLoaded ............................................... 130
  356.       DvMoveWindow ........................................... 131
  357.       DvMyHandle ............................................. 131
  358.       DvPifExecute ........................................... 131
  359.       DvResizeWindow ......................................... 131
  360.       DvSetBottom ............................................ 131
  361.       DvSetTop ............................................... 132
  362.       DvUnFreeze ............................................. 132
  363.       DvUnHide ............................................... 132
  364.       Else ................................................... 132
  365.       ElseIf ................................................. 133
  366.       EmsInstalled ........................................... 133
  367.       EmsVersion ............................................. 133
  368.       EndComment ............................................. 133
  369.       Endif .................................................. 134
  370.       EndLoop ................................................ 134
  371.       EndOfFile .............................................. 134
  372.       EndProc ................................................ 135
  373.       EndWhile ............................................... 135
  374.       EnvFree ................................................ 135
  375.       EnvSize ................................................ 135
  376.       EraseTopWindow ......................................... 135
  377.       EraseWindow ............................................ 136
  378.       Execute ................................................ 136
  379.       ExistDir ............................................... 137
  380.       ExistFile .............................................. 137
  381.       ExistOnPath ............................................ 138
  382.       ExitCode ............................................... 138
  383.       ExitMenu ............................................... 138
  384.       Exp .................................................... 138
  385.       Explode ................................................ 138
  386.       ExplodeDelay ........................................... 139
  387.  
  388.     Computer Tyme * MarxMenu * Table of Contents            Page #7
  389.     -----------------------------------------------------------------
  390.     
  391.       Extension .............................................. 139
  392.       FileAppend ............................................. 139
  393.       FileAssign ............................................. 139
  394.       FileAttr ............................................... 140
  395.       FileClose .............................................. 140
  396.       FileCreate ............................................. 140
  397.       FileDate ............................................... 141
  398.       FileFlush .............................................. 141
  399.       FileLog ................................................ 141
  400.       FileOpen ............................................... 141
  401.       FilePart ............................................... 142
  402.       FilePos ................................................ 142
  403.       FileReadln ............................................. 142
  404.       FileRename ............................................. 142
  405.       FileResult ............................................. 142
  406.       FileSeek ............................................... 143
  407.       FileSize ............................................... 143
  408.       FileTime ............................................... 143
  409.       FileWrite .............................................. 143
  410.       FileWriteln ............................................ 143
  411.       FixPath ................................................ 144
  412.       Floppies ............................................... 144
  413.       ForceExplosion ......................................... 144
  414.       ForceExtension ......................................... 144
  415.       Fraction ............................................... 144
  416.       FreeDiskSpace .......................................... 144
  417.       FreeEms ................................................ 145
  418.       FreeMem ................................................ 145
  419.       FreeMemory ............................................. 145
  420.       FullLineReturn ......................................... 145
  421.       GetMem ................................................. 145
  422.       GotoXY ................................................. 146
  423.       HexString .............................................. 146
  424.       HiddenAndSystem ........................................ 146
  425.       HighWord ............................................... 146
  426.       Hour ................................................... 147
  427.       HourOf ................................................. 147
  428.       Hundredth .............................................. 147
  429.       IdleProgram ............................................ 147
  430.       If ..................................................... 148
  431.       InactiveBox ............................................ 149
  432.       InactiveBoxColor ....................................... 149
  433.       InactiveShadow ......................................... 149
  434.       Include ................................................ 149
  435.       IncludeDirectories ..................................... 150
  436.       InFile ................................................. 150
  437.       InMem .................................................. 151
  438.       InputBlankChar ......................................... 151
  439.       InputLength ............................................ 151
  440.       InputString ............................................ 152
  441.       Insert ................................................. 152
  442.       InsertMode ............................................. 152
  443.       Int .................................................... 152
  444.       Integer ................................................ 153
  445.       Intr ................................................... 153
  446.  
  447.     Computer Tyme * MarxMenu * Table of Contents            Page #8
  448.     -----------------------------------------------------------------
  449.     
  450.       InverseColor ........................................... 153
  451.       InvertString ........................................... 153
  452.       IpxLoaded .............................................. 153
  453.       Jump ................................................... 154
  454.       KbdReady ............................................... 154
  455.       KeyEvent ............................................... 154
  456.       KeyFromMouse ........................................... 154
  457.       KeySave ................................................ 155
  458.       KillMusic .............................................. 155
  459.       LastDrive .............................................. 155
  460.       LastKey ................................................ 155
  461.       Left ................................................... 155
  462.       Length ................................................. 156
  463.       Ln ..................................................... 156
  464.       Loc .................................................... 156
  465.       Local .................................................. 157
  466.       LockWord ............................................... 158
  467.       Logoff ................................................. 158
  468.       LogoffTime ............................................. 159
  469.       Logout ................................................. 159
  470.       LongestLine ............................................ 160
  471.       Loop ................................................... 160
  472.       LoopIndex .............................................. 161
  473.       LoopLevel .............................................. 161
  474.       LoopLimit .............................................. 161
  475.       LowerCase .............................................. 162
  476.       LowWord ................................................ 162
  477.       MachineName ............................................ 162
  478.       MakeListEntry .......................................... 162
  479.       MarxVersion ............................................ 163
  480.       MasterEnvironment ...................................... 163
  481.       Max .................................................... 163
  482.       MatrixInvert ........................................... 163
  483.       McpClass ............................................... 164
  484.       McpName ................................................ 164
  485.       Mem .................................................... 164
  486.       MemL ................................................... 164
  487.       MemSize ................................................ 165
  488.       MemW ................................................... 165
  489.       MemoryLoc .............................................. 165
  490.       MenuFileName ........................................... 165
  491.       MenuKeyBuffer .......................................... 165
  492.       MhsDirectory ........................................... 166
  493.       MhsMailDirectory ....................................... 166
  494.       MhsReadFile ............................................ 166
  495.       MhsSendDirectory ....................................... 167
  496.       MhsUserDirectory ....................................... 167
  497.       Mid .................................................... 167
  498.       Min .................................................... 167
  499.       MinorDosVersion ........................................ 168
  500.       Minute ................................................. 168
  501.       MinuteOf ............................................... 168
  502.       MkDir .................................................. 168
  503.       Mod .................................................... 168
  504.       ModifyPath ............................................. 169
  505.  
  506.     Computer Tyme * MarxMenu * Table of Contents            Page #9
  507.     -----------------------------------------------------------------
  508.     
  509.       Month .................................................. 169
  510.       MonthOf ................................................ 169
  511.       Mouse .................................................. 169
  512.       MouseHorizontal ........................................ 170
  513.       MouseIRQ ............................................... 170
  514.       MouseType .............................................. 170
  515.       MouseVersion ........................................... 170
  516.       MouseVertical .......................................... 170
  517.       MoveWindow ............................................. 171
  518.       MsDos .................................................. 171
  519.       MxCmd .................................................. 171
  520.       NamePart ............................................... 172
  521.       NetworkVersion ......................................... 172
  522.       NextWord ............................................... 172
  523.       Nil .................................................... 172
  524.       NoBoxBorder ............................................ 172
  525.       NoExit ................................................. 172
  526.       Not .................................................... 173
  527.       NotesLeft .............................................. 173
  528.       NotesPlayed ............................................ 173
  529.       NovAccountExpDate ...................................... 173
  530.       NovAddUserToGroup ...................................... 173
  531.       NovAddToSet ............................................ 174
  532.       NovAttach .............................................. 174
  533.       NovAttachedServers ..................................... 174
  534.       NovAutoDetach .......................................... 175
  535.       NovBinderyAccess ....................................... 175
  536.       NovBroadcastMode ....................................... 175
  537.       NovCaptureCopies ....................................... 175
  538.       NovCaptureFF ........................................... 176
  539.       NovCaptureFile ......................................... 176
  540.       NovCaptureFlush ........................................ 176
  541.       NovCaptureForm ......................................... 176
  542.       NovCaptureQueue ........................................ 177
  543.       NovCaptureReset ........................................ 177
  544.       NovCaptureSetup ........................................ 177
  545.       NovCaptureTabSize ...................................... 177
  546.       NovCaptureTimeOut ...................................... 178
  547.       NovCaptureUseBanner .................................... 178
  548.       NovChangePassword ...................................... 178
  549.       NovChangeObjPassword ................................... 178
  550.       NovCleanVolumeName ..................................... 179
  551.       NovClearConnection ..................................... 179
  552.       NovCloseBindery ........................................ 179
  553.       NovCloseSemaphore ...................................... 179
  554.       NovConnection .......................................... 179
  555.       NovConnectionsInUse .................................... 180
  556.       NovConsoleOperator ..................................... 180
  557.       NovCreateObject ........................................ 180
  558.       NovCreateProperty ...................................... 182
  559.       NovDefaultServer ....................................... 182
  560.       NovDeleteFromSet ....................................... 182
  561.       NovDeleteObject ........................................ 183
  562.       NovDeleteProperty ...................................... 183
  563.       NovDetach .............................................. 183
  564.  
  565.     Computer Tyme * MarxMenu * Table of Contents            Page #10
  566.     -----------------------------------------------------------------
  567.     
  568.       NovDownServer .......................................... 183
  569.       NovEndCapture .......................................... 184
  570.       NovForceDownServer ..................................... 184
  571.       NovFreeDirSlots ........................................ 184
  572.       NovFreeVolumeSpace ..................................... 184
  573.       NovFullName ............................................ 184
  574.       NovGetConnections ...................................... 185
  575.       NovGetMessage .......................................... 185
  576.       NovGraceLoginReset ..................................... 185
  577.       NovGraceLogins ......................................... 186
  578.       NovGroupMembers ........................................ 186
  579.       NovGroups .............................................. 186
  580.       NovInGroup ............................................. 187
  581.       NovLastLoginDate ....................................... 187
  582.       NovLogin ............................................... 187
  583.       NovLoginName ........................................... 188
  584.       NovLogout .............................................. 188
  585.       NovMapDrive ............................................ 188
  586.       NovMapRoot ............................................. 188
  587.       NovMaxConnections ...................................... 189
  588.       NovMinPasswordLength ................................... 189
  589.       NovMyLoginName ......................................... 189
  590.       NovMyPassword .......................................... 189
  591.       NovMyPrintQueues ....................................... 190
  592.       NovObjectID ............................................ 190
  593.       NovObjects ............................................. 190
  594.       NovObjectSecurity ...................................... 191
  595.       NovOpenBindery ......................................... 191
  596.       NovOpenSemaphore ....................................... 191
  597.       NovPasswordExpDate ..................................... 192
  598.       NovPreferredServer ..................................... 192
  599.       NovPrimaryServer ....................................... 192
  600.       NovPrintQueues ......................................... 192
  601.       NovPropertySecurity .................................... 193
  602.       NovPropertyValues ...................................... 193
  603.       NovReadGroups .......................................... 194
  604.       NovReadSecurityEquals .................................. 194
  605.       NovRemoveUserFromGroup ................................. 194
  606.       NovRenameObject ........................................ 195
  607.       NovResult .............................................. 195
  608.       NovScanProperties ...................................... 195
  609.       NovScanTrusteePaths .................................... 195
  610.       NovSecurityEquals ...................................... 196
  611.       NovSemaphoreTimeout .................................... 196
  612.       NovSemaphoreUsers ...................................... 196
  613.       NovSemaphoreValue ...................................... 196
  614.       NovSendMessage ......................................... 197
  615.       NovServerLogin ......................................... 197
  616.       NovServers ............................................. 197
  617.       NovServerTime .......................................... 197
  618.       NovSetPreferredServer .................................. 198
  619.       NovSetPrimaryServer .................................... 198
  620.       NovSetProperty ......................................... 198
  621.       NovShellVersion ........................................ 199
  622.       NovSignalSemaphore ..................................... 199
  623.  
  624.     Computer Tyme * MarxMenu * Table of Contents            Page #11
  625.     -----------------------------------------------------------------
  626.     
  627.       NovStaticObject ........................................ 199
  628.       NovStaticProperty ...................................... 199
  629.       NovStationAddress ...................................... 199
  630.       NovTotalDirSlots ....................................... 200
  631.       NovTotalVolumeSpace .................................... 200
  632.       NovUsedVolumeSpace ..................................... 200
  633.       NovUserInGroup ......................................... 201
  634.       NovUsers ............................................... 201
  635.       NovUsersLoggedIn ....................................... 201
  636.       NovVersionNumber ....................................... 202
  637.       NovVolumeNumber ........................................ 202
  638.       NovVolumes ............................................. 202
  639.       NovWaitOnSemaphore ..................................... 202
  640.       NovWritePropValue ...................................... 202
  641.       NumberOfElements ....................................... 203
  642.       Now .................................................... 203
  643.       NumericOnly ............................................ 203
  644.       NumLock ................................................ 203
  645.       Offset ................................................. 204
  646.       OnKey .................................................. 204
  647.       OnScreenOnly ........................................... 206
  648.       OpenPrinter ............................................ 206
  649.       OptionSwitch ........................................... 206
  650.       Or ..................................................... 206
  651.       Ord .................................................... 207
  652.       OutFile ................................................ 207
  653.       OverKey ................................................ 207
  654.       Overlay ................................................ 207
  655.       Overlayed .............................................. 208
  656.       PadLeft ................................................ 208
  657.       PadRight ............................................... 208
  658.       ParallelPorts .......................................... 208
  659.       ParamStr ............................................... 209
  660.       ParentEnvironment ...................................... 209
  661.       Password ............................................... 209
  662.       PathPart ............................................... 209
  663.       PauseAfterExecute ...................................... 210
  664.       PcType ................................................. 210
  665.       Pi ..................................................... 210
  666.       PickFile ............................................... 210
  667.       PickMany ............................................... 211
  668.       PickManyPositions ...................................... 211
  669.       PickOne ................................................ 212
  670.       PickPosition ........................................... 212
  671.       Port ................................................... 212
  672.       Pos .................................................... 212
  673.       PosInList .............................................. 213
  674.       PosInSortedList ........................................ 213
  675.       Power .................................................. 213
  676.       Pred ................................................... 213
  677.       Print .................................................. 214
  678.       PrinterName ............................................ 214
  679.       Println ................................................ 214
  680.       PrintScreen ............................................ 214
  681.       Procedure .............................................. 214
  682.  
  683.     Computer Tyme * MarxMenu * Table of Contents            Page #12
  684.     -----------------------------------------------------------------
  685.     
  686.       PullMenu ............................................... 216
  687.       Qualifier .............................................. 216
  688.       QualVal ................................................ 216
  689.       Random ................................................. 217
  690.       ReadAscTextFile ........................................ 217
  691.       ReadDirectory .......................................... 217
  692.       ReadEnv ................................................ 218
  693.       ReadEnvironment ........................................ 218
  694.       ReadFileBlock .......................................... 219
  695.       ReadKey ................................................ 219
  696.       Readln ................................................. 220
  697.       ReadlnAsc .............................................. 220
  698.       ReadSqDirectory ........................................ 220
  699.       ReadTextFile ........................................... 221
  700.       Real ................................................... 222
  701.       Reboot ................................................. 222
  702.       ReleaseDate ............................................ 222
  703.       Repeat ................................................. 222
  704.       ResizeWindow ........................................... 223
  705.       Return ................................................. 223
  706.       ReturnCode ............................................. 223
  707.       Right .................................................. 224
  708.       RmDir .................................................. 224
  709.       RollWindow ............................................. 224
  710.       Run .................................................... 225
  711.       SavePosition ........................................... 225
  712.       ScreenHeight ........................................... 226
  713.       ScreenWidth ............................................ 226
  714.       ScrollLock ............................................. 226
  715.       ScrollMove ............................................. 226
  716.       Second ................................................. 226
  717.       SecondOf ............................................... 227
  718.       Security ............................................... 227
  719.       Segment ................................................ 227
  720.       SelectPath ............................................. 227
  721.       SerialNumber ........................................... 228
  722.       SerialPorts ............................................ 228
  723.       Set .................................................... 228
  724.       SetArraySize ........................................... 228
  725.       SetEnv ................................................. 228
  726.       SetTimerTask ........................................... 229
  727.       SetTopWindow ........................................... 229
  728.       SetWindowUnder ......................................... 230
  729.       Shadow ................................................. 230
  730.       ShadowColor ............................................ 230
  731.       ShadowPosition ......................................... 230
  732.       Shared ................................................. 231
  733.       ShellEnvironment ....................................... 231
  734.       Shl .................................................... 231
  735.       Shr .................................................... 231
  736.       Sin .................................................... 232
  737.       SingleLineBox .......................................... 232
  738.       SmallShadow ............................................ 232
  739.       SortArray .............................................. 232
  740.       SortArrayLinked ........................................ 233
  741.  
  742.     Computer Tyme * MarxMenu * Table of Contents            Page #13
  743.     -----------------------------------------------------------------
  744.     
  745.       Sound .................................................. 233
  746.       SplitPath .............................................. 233
  747.       SpxFreeConnections ..................................... 234
  748.       SpxLoaded .............................................. 234
  749.       SpxMaxConnections ...................................... 234
  750.       Sqr .................................................... 234
  751.       StandardIO ............................................. 234
  752.       Str .................................................... 235
  753.       StuffAKey .............................................. 235
  754.       StuffKBD ............................................... 235
  755.       StuffKeyboardNow ....................................... 235
  756.       Succ ................................................... 235
  757.       Suggest ................................................ 236
  758.       TaskNumber ............................................. 236
  759.       TextBackground ......................................... 236
  760.       TextColor .............................................. 236
  761.       TextMode ............................................... 237
  762.       TextPos ................................................ 237
  763.       TextSeek ............................................... 237
  764.       Then ................................................... 237
  765.       TimeOf ................................................. 237
  766.       Timer .................................................. 238
  767.       TimeSeparator .......................................... 238
  768.       TimeString ............................................. 238
  769.       TMaxActiveTasks ........................................ 238
  770.       TMaxCreateTask ......................................... 239
  771.       TMaxCut ................................................ 239
  772.       TMaxDeleteTask ......................................... 239
  773.       TMaxDirectSwitching .................................... 239
  774.       TMaxEMSMemLim .......................................... 239
  775.       TMaxGetPasteBuffer ..................................... 240
  776.       TMaxInstalled .......................................... 240
  777.       TMaxMaxTasks ........................................... 240
  778.       TMaxNameTask ........................................... 240
  779.       TMaxPaste .............................................. 240
  780.       TMaxReadTaskInfo ....................................... 241
  781.       TMaxResult ............................................. 241
  782.       TMaxReturnCount ........................................ 241
  783.       TMaxSetPasteBuffer ..................................... 241
  784.       TMaxSwitchTasks ........................................ 242
  785.       TMaxSwitchToManager .................................... 242
  786.       TMaxTakeOver ........................................... 242
  787.       TMaxTaskOpenFiles ...................................... 242
  788.       TMaxThisTask ........................................... 242
  789.       TMaxVersion ............................................ 243
  790.       Today .................................................. 243
  791.       Tomorrow ............................................... 243
  792.       Tone ................................................... 243
  793.       TotalDiskSpace ......................................... 243
  794.       TotalEms ............................................... 244
  795.       Trim ................................................... 244
  796.       TrimInputString ........................................ 244
  797.       TrueName ............................................... 244
  798.       TSRs ................................................... 245
  799.       UnBlank ................................................ 245
  800.  
  801.     Computer Tyme * MarxMenu * Table of Contents            Page #14
  802.     -----------------------------------------------------------------
  803.     
  804.       UniqueFileName ......................................... 246
  805.       Until .................................................. 246
  806.       UpperCase .............................................. 246
  807.       UpperCaseOnly .......................................... 246
  808.       UseArrows .............................................. 247
  809.       UseCommand ............................................. 247
  810.       UsedDiskSpace .......................................... 247
  811.       UseNovPassword ......................................... 248
  812.       Value .................................................. 248
  813.       Var .................................................... 248
  814.       VarType ................................................ 248
  815.       VCPIInstalled .......................................... 249
  816.       VCPIVersion ............................................ 249
  817.       VideoMode .............................................. 249
  818.       VideoPage .............................................. 249
  819.       ViewArray .............................................. 249
  820.       ViewTextFile ........................................... 250
  821.       VinCheckService ........................................ 250
  822.       VinesInt ............................................... 251
  823.       VinesLoaded ............................................ 251
  824.       VinUserName ............................................ 251
  825.       VinSerialNumber ........................................ 251
  826.       Volume ................................................. 251
  827.       VT100mode .............................................. 251
  828.       Wait ................................................... 252
  829.       WaitOrKbdReady ......................................... 252
  830.       WhereX ................................................. 252
  831.       WhereXAbs .............................................. 252
  832.       WhereY ................................................. 252
  833.       WhereYAbs .............................................. 252
  834.       While .................................................. 253
  835.       WholeFileNames ......................................... 253
  836.       Window ................................................. 253
  837.       WindowHeight ........................................... 253
  838.       WindowWidth ............................................ 254
  839.       WinX ................................................... 254
  840.       WinY ................................................... 254
  841.       Within ................................................. 254
  842.       WordStarKeys ........................................... 254
  843.       WorkString ............................................. 255
  844.       Write .................................................. 255
  845.       WriteAscTextFile ....................................... 255
  846.       WriteCenter ............................................ 255
  847.       WriteError ............................................. 255
  848.       WriteFileBlock ......................................... 255
  849.       Writeln ................................................ 256
  850.       WritelnAsc ............................................. 256
  851.       WritelnError ........................................... 256
  852.       WriteTextFile .......................................... 256
  853.       WriteVertical .......................................... 257
  854.       XmsInstalled ........................................... 257
  855.       XmsVersion ............................................. 257
  856.       Xor .................................................... 257
  857.       Year ................................................... 258
  858.       YearOf ................................................. 258
  859.  
  860.     Computer Tyme * MarxMenu * Table of Contents            Page #15
  861.     -----------------------------------------------------------------
  862.     
  863.       String Constants ....................................... 258
  864.       Time and Date Constants ................................ 259
  865.       Video Constants ........................................ 259
  866.       Color Constants ........................................ 259
  867.       Boolean Constants ...................................... 260
  868.  
  869.     Computer Tyme * MarxMenu * Users Manual                 Page #1
  870.     -----------------------------------------------------------------
  871.     
  872.      COPYRIGHT
  873.     
  874.     This manual is copyrighted material and all rights are reserved.
  875.     MarxMenu is a programming language which describes to the computer what
  876.     it is supposed to do. Even though some of the individual words in
  877.     MarxMenu are used in other programming languages, I claim a copyright on
  878.     the collection of words which make up the MarxMenu language. I therefore
  879.     consider it an infringement of my Copyright to create a software product
  880.     which uses the MarxMenu language, or translates MarxMenu source code,
  881.     without purchasing a license to do so.
  882.     
  883.     The combinations of definitions of commands in this manual constitute a
  884.     copyrighted work. Any publication which describes a computer language
  885.     for which the MarxMenu command set is a subset is a violation of the
  886.     copyright of this software and this written manual.
  887.     
  888.     You agree not to translate, modify, disassemble, decompile, or reverse
  889.     engineer any of our programs. This program contains proprietary memory
  890.     variable and array addressing algorithms which are considered to be
  891.     trade secrets and our property. These algorithms include, but are not
  892.     limited to, the MarxMenu variable addressing structures and concepts as
  893.     well as those data structures MarxMenu uses in it's database features.
  894.     
  895.     Our claim of intellectual property and trade secrets is not limited to
  896.     the actual implementation of code, but extends to the MarxMenu source
  897.     language and the user interface language constructs that are unique to
  898.     this software product.
  899.     
  900.     In addition to intellectual property rights protected by law, your use
  901.     of this product constitutes your acceptance of these terms and
  902.     conditions and your acknowledgement of the above rights.
  903.     
  904.     In other words, don't try to clone MarxMenu.
  905.     
  906.     
  907.      LICENSE AGREEMENT
  908.     
  909.     You are licensed to use this program on a single CPU or workstation. If
  910.     you are running on a network, you are required to license a separate
  911.     copy for each workstation or a file server license for each file server.
  912.     If you are running on a multiuser operating system such as Concurrent
  913.     DOS, you are required to license a copy for each workstation. Everyone
  914.     who uses this menu, must license a copy unless several people share the
  915.     same workstation.
  916.     
  917.     This software is licensed and not sold. The license begins when Computer
  918.     Tyme receives payment in full. You may not transfer, sublease or rent
  919.     this software without the written consent of Computer Tyme. You are not
  920.     allowed to distribute MarxMenu in runtime form with software you've
  921.     developed unless it is in combination with a paid-for copy of MarxMenu,
  922.     or you have made special arrangements in writing with Computer Tyme to
  923.     do so.
  924.     
  925.  
  926.     Computer Tyme * MarxMenu * Users Manual                 Page #2
  927.     -----------------------------------------------------------------
  928.     
  929.     Network licenses include a license to use this software on a local hard
  930.     disk in stand-alone mode provided that the computer is part of a
  931.     computer network. Computers that are not connected to the network are
  932.     not covered. The network license also includes a license for a single
  933.     network supervisor to use the software at home for menu development and
  934.     testing.
  935.     
  936.     Site licenses require the payment of an annual renewal and support fee.
  937.     If the annual renewal fee is not paid within six months of the due date
  938.     then the site license status is considered expired and terminated.
  939.     
  940.     The warranty is limited to the diskettes to be machine readable for a
  941.     period of 180 days after purchase. Although we try hard to write perfect
  942.     software that has no bugs, we do not guarantee that. This software is
  943.     provided AS IS. We also do not guarantee that this product is fit for
  944.     any particular purpose and we are not liable for any damages that might
  945.     occur from use of this product. We reserve the right to make changes to
  946.     any and all parts of this software at any time without obligation to
  947.     notify any person or entity of such changes. This agreement is governed
  948.     by the laws of the State of Missouri.
  949.     
  950.     Use of this product constitutes your acceptance of the terms and
  951.     conditions of this license and of my copyright and your agreement to
  952.     abide by these terms and conditions. We may terminate this license at
  953.     any time if you are in breach of any of its terms or conditions.
  954.     
  955.     We reserve the right to conduct or have conducted audits to verify your
  956.     compliance with this agreement.
  957.     
  958.     I would like to thank the following people for making this product
  959.     possible:
  960.     
  961.     Joe Smith, and Kevin Moore for helping write this manual. My wife Vicki
  962.     for being good to me and helping with revisions and editing.
  963.     
  964.     The Computer Tyme staff for being the best employees in the world.
  965.     
  966.     Borland International for writing Turbo Pascal and keeping it bug free
  967.     and well supported.
  968.     
  969.     TurboPower Software for their very powerful extensions to Turbo Pascal
  970.     and their well written, well supported product.
  971.     
  972.     All users who actually paid for this product so that we may continue to
  973.     eat.
  974.     
  975.     Those of you who have pointed out bugs and made suggestions to improve
  976.     our product.
  977.     
  978.  
  979.     Computer Tyme * MarxMenu * Users Manual                 Page #3
  980.     -----------------------------------------------------------------
  981.     
  982.      MARXMENU TRADEMARKS
  983.     
  984.     MarxMenu is a registered trademark of Computer Tyme. DOS ToolBox,
  985.     Directory Master, MarxBase, MarxCom, anything that begins with the word
  986.     Marx, and The Network Survival Kit are trademarks of Computer Tyme.
  987.     
  988.      Lotus is a registered trademark of Lotus Development.
  989.      Wordstar is a registered trademark of MicroPro International.
  990.      Smart Software is a trademark of Informix.
  991.      MS-DOS and MS-Windows are trademarks of Microsoft.
  992.      Turbo Pascal is a trademark of Borland International.
  993.      OPRO and TPRO are trademarks of TurboPower Software.
  994.      Netware, Novell and Btrieve are trademarks of Novell.
  995.      Concurrent DOS and DR-DOS are trademarks of Novell.
  996.      DesqView and QEMM are trademarks of Quarterdeck.
  997.      IBM and OS/2 are trademarks of International Business Machines.
  998.     
  999.      Created using Turbo Pascal
  1000.      Copyright 1983-92 by Borland International
  1001.     
  1002.     When I first started writing this program my friends referred to it as
  1003.     Marc's Menu. That's where the name MarxMenu came from. It has nothing to
  1004.     do with either Carl or Groucho Marx.
  1005.     
  1006.     
  1007.      TECHNICAL SUPPORT
  1008.     
  1009.     Technical support for MarxMenu is provided in several ways. The first is
  1010.     by calling our voice line 1-417-866-1222. We would ask that you not call
  1011.     the 800 number as that is for orders and ordering information only.
  1012.     
  1013.     We have several support staff and will try to answer your questions as
  1014.     quickly and efficiently as possible. We at Computer Tyme look at
  1015.     technical support as an opportunity to improve our product.
  1016.     
  1017.     We also have a 24 hour 3 line BBS system. The BBS system is written in
  1018.     MarxMenu script and the source code to the BBS is available for
  1019.     download. Users with modems can leave messages about support issues.
  1020.     There are several user uploaded menus here and it serves as a forum for
  1021.     MarxMenu users to share ideas and techniques.
  1022.     
  1023.     Our BBS number is 1-417-866-1665. It supports 14400 baud but is 2400
  1024.     baud compatible. Use 8 bits, no parity, 1 stop bit (8N1). You will also
  1025.     need to set your terminal emulation mode to ANSI or VT100. Do not try to
  1026.     call the BBS with 7 bits or even parity. It won't work.
  1027.     
  1028.     On our BBS are additional sample menu files that other MarxMenu users
  1029.     like yourself have uploaded. We encourage you to share your work with
  1030.     others so that more MarxMenu users can benefit.
  1031.     
  1032.  
  1033.     Computer Tyme * MarxMenu * Users Manual                 Page #4
  1034.     -----------------------------------------------------------------
  1035.     
  1036.     When uploading problem menus to our BBS, try to isolate the problem and
  1037.     send as small a sample as you can that demonstrates the problem. Be sure
  1038.     to add a comment block in your code describing the problem and include
  1039.     your name and phone number so that we can call you back when we are done
  1040.     with your menu.
  1041.     
  1042.     We are also available on Compuserve in the Novell vendors forum. From
  1043.     any Compuserve prompt type GO COMPTYME. We have section 3.
  1044.     
  1045.     We also have 3 fax servers on line. Our fax number is 417-866-0135. If
  1046.     you're having a problem with menu code please don't fax long menus to
  1047.     us. We prefer that you upload the code to our BBS so that we can run it.
  1048.     
  1049.     We also offer a Fast Update Service which includes regular upgrades sent
  1050.     to you automatically as we come out with them. This doesn't mean every
  1051.     version of MarxMenu, but every few months after making several
  1052.     improvements and the product is at a stable point. The Fast Update
  1053.     Service includes special access to our support BBS.
  1054.     
  1055.     This service is for the very fierce MarxMenu user who has to have the
  1056.     "Latest and Greatest" all the time.
  1057.     
  1058.     Computer Tyme provides technical support for users evaluating the
  1059.     software as well as registered users. You should know your MarxMenu
  1060.     version number before you call. If you type MARXMENU at the command line
  1061.     it will give you a version number and a release date.
  1062.     
  1063.     
  1064.      INSTALLATION
  1065.     
  1066.     The following installation instructions are for both MarxMenu single
  1067.     user version and MarxMenu network version. The network version is
  1068.     included in The Network Survival Kit.
  1069.     
  1070.     The single user version of MarxMenu is installed by copying the disks
  1071.     into a subdirectory called MARX to keep the files better organized.
  1072.     However, this is not necessary. Copy all the disks that come with
  1073.     MarxMenu into a directory on your hard disk or network.
  1074.     
  1075.     The Network Survival Kit is installed by copying the disk into a
  1076.     directory on your server. Typically you would make a directory called
  1077.     NSK under the PUBLIC directory. That way the NSK directory will inherit
  1078.     the rights of PUBLIC. It will unpack into about 3.5 megs of programs and
  1079.     documentation.
  1080.     
  1081.     Once the files are copied into the proper directory, for example,
  1082.     PUBLIC\NSK on the network or C:\MARX on a single hard drive, type
  1083.     INSTALL. Be sure to have your serial number and access code ready. When
  1084.     this is done, you can run some of the sample menus by typing MARX
  1085.     <menu>.
  1086.     
  1087.  
  1088.     Computer Tyme * MarxMenu * Users Manual                 Page #5
  1089.     -----------------------------------------------------------------
  1090.     
  1091.     Be sure to print out the DOC files on any programs you are interested in
  1092.     and print out the MARXREAD.ME file. MARXHELP is activated by typing
  1093.     MARXHELP at the command line.
  1094.     
  1095.     IMPORTANT: Make sure you do not run the install from the floppy disk.
  1096.     
  1097.     If you are running the Network Survival Kit on several file servers that
  1098.     are bridged together, and you have purchased several single server
  1099.     MarxMenus, be sure not to install the same serial number on more than
  1100.     one file server. MarxMenu is smart enough to detect this. If you have a
  1101.     multi-server version of MarxMenu, then you can install MarxMenu on
  1102.     several fileservers without getting a license violation error.
  1103.     
  1104.     On a Novell netowrk, MarxMenu stores it's serial number information in
  1105.     the Bindery as well as the MARXMENU.EXE file. Thus when you get a new
  1106.     version of MarxMenu it will serialize itself the first time you run it.
  1107.     This makes updates easier.
  1108.     
  1109.                -------- V E R Y * I M P O R T A N T --------
  1110.     
  1111.     The MarxMenu subdirectory must be path accessible. That is, you must
  1112.     have a path statement in your AUTOEXEC.BAT file that includes the
  1113.     directory where the menu system resides. A typical path statement might
  1114.     look like this:
  1115.     
  1116.      PATH=C:\;C:\DOS;C:\MARX;
  1117.     
  1118.     MarxMenu requires up to 100 bytes of free environment space. It won't
  1119.     run without it. The way you get more environment space is to add a SHELL
  1120.     command to your CONFIG.SYS file.
  1121.     
  1122.      SHELL=COMMAND.COM /P /E:nnn
  1123.     
  1124.     Where NNN is the number of bytes for the environment to reserve. Note
  1125.     that if you are running DOS 3.1 then NNN is the number of 16 byte blocks
  1126.     to allocate for the environment.
  1127.     
  1128.      For DOS 3.2 or later:
  1129.      SHELL=COMMAND.COM /P /E:400
  1130.     
  1131.      For DOS 3.1:
  1132.      SHELL=COMMAND.COM /P /E:25
  1133.     
  1134.     If MarxMenu gives you an environment space error, this is where you go
  1135.     to fix it. After changing the CONFIG.SYS file, you will have to reboot
  1136.     the computer to make it take effect.
  1137.     
  1138.     Another situation that can cause an "Out of Environment Space" error is
  1139.     having more than one COMMAND.COM loaded. You can test for this by
  1140.     running RAMMAP or MAPMEM. These programs will show you what's in memory.
  1141.     If you need to load a second COMMAND.COM be sure to use the /E switch to
  1142.     expand the environment of the new COMMAND.COM.
  1143.     
  1144.  
  1145.     Computer Tyme * MarxMenu * Users Manual                 Page #6
  1146.     -----------------------------------------------------------------
  1147.     
  1148.      GETTING STARTED QUICK
  1149.     
  1150.     After installing the software the first thing to do is try it out. Type
  1151.     MARX QUICK (or MARX QUICKNOV for Novell networks) and a menu should come
  1152.     up. Then select the Utilities option. This will open up another window.
  1153.     You then choose DOS Menu and then Free Space. If everything goes right
  1154.     the menu will run FREE.EXE and then return to the menu. After returning
  1155.     to the menu press ESC a few times and exit back to the command line.
  1156.     
  1157.     If everything works right then MarxMenu is working. If you get errors
  1158.     then you'll need to fix them before going on. If you get an "Out of
  1159.     environment space" error then you'll have to increase the environment
  1160.     space before continuing.
  1161.     
  1162.     The MarxMenu disk contains many sample menus for you to start with.
  1163.     Which one to use depends on what your needs are. Typically on a single
  1164.     user system you might start with QUICK menu.
  1165.     
  1166.     To start with the QUICK menu, copy it to a different name such as MY.MNU
  1167.     as follows:
  1168.     
  1169.      COPY QUICK.MNU MY.MNU
  1170.     
  1171.     Then edit MY.MNU with your favorite editor. You will quickly see how
  1172.     this menu works and will be able to substitute your programs for the
  1173.     ones it is set up for. You can then test and run your menu by typing
  1174.     MARX MY.
  1175.     
  1176.     If you want more of a self-configuring menu you might try the LEVEL1
  1177.     menu. This menu requires no programming and lets you set up menus
  1178.     interactively.
  1179.     
  1180.     On a Novell network you might start with the QUICKNOV menu or translate
  1181.     your existing Novell menus with NOVTRANS. The LOGIN menu requires a lot
  1182.     of customization for your system. I wouldn't start on this menu until
  1183.     your regular menus are written.
  1184.     
  1185.     In the QUICK and QUICKNOV examples we have defined AddChoice and Task
  1186.     procedures. These procedures are written in MarxMenu so you won't find
  1187.     them in the list of MarxMenu's internal commands. AddChoice commands are
  1188.     used with OnKey Task commands to create selections in the menu.
  1189.     
  1190.        AddChoice('Directory Master',1)
  1191.        AddChoice('Pick Directory',2)
  1192.        AddChoice('Memory Map',3)
  1193.        AddChoice('Free Space',4)
  1194.     
  1195.        CornerStretchBox ('DOS Menu',38,15)
  1196.     
  1197.  
  1198.     Computer Tyme * MarxMenu * Users Manual                 Page #7
  1199.     -----------------------------------------------------------------
  1200.     
  1201.        OnKey Task(1)
  1202.           DM
  1203.     
  1204.        OnKey Task(2)
  1205.           PD
  1206.     
  1207.        OnKey Task(3)
  1208.           RamMap
  1209.           Pause
  1210.     
  1211.        OnKey Task(4)
  1212.           Free
  1213.           Pause
  1214.     
  1215.     It's that simple! The AddChoice controls what you see on the screen and
  1216.     the OnKey Task controls what it does. Under the OnKey command it's just
  1217.     like writing a batch file.
  1218.     
  1219.     The numbers in the AddChoice statements correspond to the OnKey Task(n)
  1220.     statements so that Tasks are associated with choices. The
  1221.     CornerStretchBox creates a self-sizing box where the upper left corner
  1222.     position coordinates are specified.
  1223.     
  1224.     You won't find the commands AddChoice, CornerStretchBox, or Task in the
  1225.     manual. That's because they are procedures defined in Include files. The
  1226.     QUICK and QUICKNOV menus include CUSTOM.INC and WINSUP.INC which allow
  1227.     you to set up various features of the menus. CUSTOM.INC can include
  1228.     either NOVELL.INC, BLOCK.INC, or GRID.INC which change the look and feel
  1229.     of the menus. You might want to experiment with these to see which one
  1230.     you like the best. You'll have to go into these three Include files if
  1231.     you want to change the colors.  PLEASE NOTE:  If you revise an include
  1232.     file, you will need to recompile your .MNU file with the MARXCOMP
  1233.     compiler.  Typing "MARX {menuname}" will not incorporate changes made
  1234.     to any Include files until after you type "MARXCOMP {menuname}".
  1235.     
  1236.     When you execute a menu after modifying include (INC) files, MarxMenu
  1237.     doesn't automatically recompile the menu the same way it does when you
  1238.     modify the menu file directly. After changing an Include file referenced
  1239.     within a menu, you need to force a recompile by typing MARXCOMP QUICK or
  1240.     you can delete the MRX file to force a recompile.
  1241.     
  1242.     These menus are designed to get you going quickly. If you want to do
  1243.     weird stuff MarxMenu can do weird stuff, but it takes a little more
  1244.     work. The reason we have so many commands in MarxMenu is to be able to do
  1245.     weird stuff so if you need to do something strange, we probably already
  1246.     have a command to do it.
  1247.     
  1248.     The example menus on disk (MNU files) show a variety of uses for
  1249.     MarxMenu. They can be used like libraries of routines to cut code from
  1250.     and paste into your current menu. A good way to learn MarxMenu is to
  1251.     print out the example menus and study the code.
  1252.     
  1253.  
  1254.     Computer Tyme * MarxMenu * Users Manual                 Page #8
  1255.     -----------------------------------------------------------------
  1256.     
  1257.      USE MARXHELP
  1258.     
  1259.     MarxHelp is a TSR pop-up help program for MarxMenu. It acts as an online
  1260.     reference guide to all of the MarxMenu commands. MarxHelp only takes 8k
  1261.     of RAM and is very useful while writing your MarxMenu menus. It gives
  1262.     you the complete manual on-line and is fully indexed electronically. It
  1263.     even has a keyword search to help you find the command you are looking
  1264.     for.
  1265.     
  1266.     I strongly encourage the use of MarxHelp. MarxHelp has everything this
  1267.     manual has in it and more and it is easier to read and find things than
  1268.     thumbing through pages. MarxHelp is updated with every release of
  1269.     MarxMenu and contains new features and program changes the paper manual
  1270.     doesn't. Once you get used to using it, you won't want to go back to
  1271.     paper documentation. Using MarxHelp is better than using the manual.
  1272.     
  1273.     To load MarxHelp type MarxHelp at the command line. This prepares
  1274.     MarxHelp to be available as a TSR while you're creating or editing a
  1275.     menu file. Then if you want to pop up an index press Shift-F3. The
  1276.     Shift-F2 key will repeat your last help topic and Shift-F1 will look up
  1277.     the word your cursor is on.
  1278.     
  1279.     To get more help on MarxMenu type MarxHelp /?. If you need to unload
  1280.     MarxHelp from memory, type MarxHelp /U. Once you bring up MarxHelp, read
  1281.     the Help on Help section for more detailed information on how to use
  1282.     MarxHelp. MarxHelp also contains the entire text of the DOS ToolBox and
  1283.     Network Survival Kit utilities.
  1284.     
  1285.     MarxHelp comes with the Computer Tyme Network Survival Kit. It can also
  1286.     be downloaded from our support BBS. It does not come bundled with the
  1287.     single user version.
  1288.     
  1289.     
  1290.      COMMON QUESTIONS AND MISTAKES
  1291.     
  1292.     There are some common mistakes people make that I get a lot of calls
  1293.     about. I'm going to attempt to point these out so that you don't waste a
  1294.     long distance call over something that's in the book.
  1295.     
  1296.     When running MarxMenu as a menu you type MARX menuname and not MARXMENU
  1297.     menuname. You must run the MARX.BAT file in order for MarxMenu to be
  1298.     able to execute other programs.
  1299.     
  1300.     MarxMenu MUST be in your search path. When you type PATH at the command
  1301.     line, make sure that the MarxMenu directory is in the path. If it isn't,
  1302.     put it in because MarxMenu will not work unless it is added to the path.
  1303.     If your menu is stuck in a loop and you can't get out, it is because
  1304.     MarxMenu is not in the path.
  1305.     
  1306.  
  1307.     Computer Tyme * MarxMenu * Users Manual                 Page #9
  1308.     -----------------------------------------------------------------
  1309.     
  1310.     When running MarxMenu on a network, MarxMenu will want to create it's
  1311.     temporary batch files in the same directory where MarxMenu is located.
  1312.     The user must have enough rights to create these files. If you don't
  1313.     want to give the user rights in this directory then set an environment
  1314.     variable TEMP to point to a directory where the user does have rights.
  1315.     If you notice that you (as supervisor) can run the menu just fine, but
  1316.     your users get errors, it's because they don't have enough rights.
  1317.     
  1318.     When using MarxMenu to logon to or logoff from the network, you need
  1319.     to follow all the rules in the sections on network usage. It is very
  1320.     tricky to do these functions and there are things you can do and things
  1321.     you can't. There are things that you think should work but don't. So, I
  1322.     strongly suggest that you follow the instructions. I have spent hundreds
  1323.     of hours fighting these issues and I have pretty much figured out what
  1324.     you can do and what you can't do.
  1325.     
  1326.     If you are getting "Bad Command or Filename" errors when running
  1327.     MarxMenu, edit the first line of MARX.BAT and turn ECHO ON. Then you can
  1328.     watch what is happening. You can also put PAUSE in so it won't go by too
  1329.     fast that you can't see it.
  1330.     
  1331.     Another common question is, "Do you have a command that does this?" The
  1332.     quickest way to hunt up commands is to use the MarxHelp TSR. Besides
  1333.     being highly cross-indexed, it also has word search capabilities.
  1334.     
  1335.     Several of the example files have Include files. I use the INC extension
  1336.     on these files. Commands like AddChoice and CornerStretchBox are
  1337.     procedures that are defined in these Include files and are not MarxMenu
  1338.     commands. This is also where the menu colors are defined.
  1339.     
  1340.     When using the Novell menu translator you may get a "Window Out Of
  1341.     Bounds" error. This means that the Novell menu has more choices than
  1342.     will fit on the screen. The solution is to break up the menu into
  1343.     submenus.
  1344.     
  1345.     Also, when running the translator you type MARXMENU NOVTRANS menu, not
  1346.     MARX NOVTRANS menu. Since the menu translator is being used as a
  1347.     translator instead of a menu you use MARXMENU instead of MARX.
  1348.     
  1349.     When upgrading MarxMenu from a previous version, you must chase everyone
  1350.     out of the menu before upgrading. Otherwise the MARXMENU.OVR file is
  1351.     locked and can't be overwritten. I suggest deleting the old MARXMENU.OVR
  1352.     file first. If you can delete it then everyone is out. I get calls about
  1353.     this where the supervisor swears everyone is out of the menu when they
  1354.     aren't. If you can't delete the file then someone has it open.
  1355.     
  1356.     When you upgrade MarxMenu the MRX files need to be recompiled. If the
  1357.     MNU files are available and the users have enough rights then this
  1358.     happens automatically. But, if the users don't have enough rights they
  1359.     won't be able to run the menus. You will have to go in and recompile
  1360.     them. IMPORTANT! Do not lose the MNU files. The MRX files cannot
  1361.     be uncompiled and if you don't have the MNU files, you have no
  1362.     way to alter your menus.
  1363.     
  1364.  
  1365.     Computer Tyme * MarxMenu * Users Manual                 Page #10
  1366.     -----------------------------------------------------------------
  1367.     
  1368.     You must have some free environment space for MarxMenu to use. If you
  1369.     get an "Out of Environment Space" error, it means that you are out of
  1370.     environment space. First check to see that you have SHELL= command in
  1371.     your CONFIG.SYS file. Then use RAMMAP to see it you are loading more
  1372.     than one COMMAND.COM. You can also use the FREE.EXE program to show you
  1373.     how much environment space you have. If FREE doesn't show that you have
  1374.     very much free space then you are going to have to figure out why.
  1375.     
  1376.     When Novell installs their utilities they flag files as "Sharable
  1377.     Read-Only". Don't do this with MarxMenu. This is a bad idea and is a
  1378.     left over from DOS 2.11. Even though Novell still does it, don't you do
  1379.     it. It can, and often does, cause problems.
  1380.     
  1381.     Not all programs are compatible. Sometimes you never know why. The
  1382.     solution often is to find a work around. MarxMenu supports many kinds of
  1383.     work around tricks. Sometimes the trick is to exit the menu with the
  1384.     keyboard buffer stuffed to run a program from the command line.
  1385.     
  1386.     Because of the power and flexibility of MarxMenu, many new users try to
  1387.     do complex things too fast. I recommend that you start with the basic
  1388.     menu examples and get familiar with the software. Once you are familiar
  1389.     with MarxMenu you aren't as likely to get in over your head with it's
  1390.     more complex features.
  1391.     
  1392.     Q.) This is a big manual. Will it be hard to learn?
  1393.     
  1394.     A.) No. MarxMenu is one of the easiest menus to learn and install. You
  1395.     don't have to learn hundreds of commands to make it work. Just start
  1396.     with the sample menus. But, if you want to do complicated tasks, the
  1397.     commands are there. But the more complicated the task the more effort it
  1398.     will take to make it work.
  1399.     
  1400.     Q.) I type MARXMENU QUICK and when I try to run something it dumps me
  1401.     back at the command line.
  1402.     
  1403.     A.) To run a menu you need to run the MarxMenu from MARX.BAT. You should
  1404.     type MARX QUICK instead of MARXMENU QUICK.
  1405.     
  1406.     Q.) I'm getting "Error accessing Overlays!"
  1407.     
  1408.     A.) MarxMenu requires the file MARXMENU.OVR file to be in the same
  1409.     directory as the MARXMENU.EXE file. In previous versions of MarxMenu the
  1410.     EXE and OVR files were combined. This causes file sharing problems on
  1411.     some networks and dumb multitaskers such as Windows. So we had to
  1412.     separate the overlay file.
  1413.     
  1414.     Q.) Everything was working fine and then I moved the files to another
  1415.     directory and now I'm getting "Bad command or File Name".
  1416.     
  1417.  
  1418.     Computer Tyme * MarxMenu * Users Manual                 Page #11
  1419.     -----------------------------------------------------------------
  1420.     
  1421.     A.) The MARX.BAT is generated for a specific directory. Use your editor
  1422.     or MARXEDIT to edit MARX.BAT to run in the new directory. If you
  1423.     are still having problems change the ECHO OFF to ECHO ON and
  1424.     watch the batch file execute. You can type MARXMENU INST to
  1425.     recreate the batch files.
  1426.     
  1427.     Q.) I get stuck in the menu and it won't exit. Just keeps looping.
  1428.     
  1429.     A.) The MXSTOP.BAT, BATEXIT.BAT and DROPTO.BAT files need to be in the
  1430.     same directory as MARX.BAT and MarxMenu. MarxMenu must be on your search
  1431.     path in order to work.
  1432.     
  1433.     Q.) I'm running LanTastic and when two people use the menu at the same
  1434.     time I get a "File Sharing Violation" error.
  1435.     
  1436.     A.) This is solved by setting the MARXMENU.OVR file to "Read Only".
  1437.     
  1438.     Q.) I tried changing the menu colors by editing the NOVELL.INC file but
  1439.     no colors changed. What am I doing wrong?
  1440.     
  1441.     A.) MarxMenu automatically recompiles when you change the menu file
  1442.     because it compares the date of the MNU file to the MRX file. Include
  1443.     files are not compared this way. What you need to do after changing an
  1444.     Include file is to force MarxMenu to recompile. This is done by typing
  1445.     MARXCOMP <menu> or by deleting the MRX file.
  1446.     
  1447.     Q.) When I run some programs, (MultiMate) and come back to the menu my
  1448.     colors are gone. It comes up in black and white.
  1449.     
  1450.     A.) Some programs change the video mode to BW80 and leave it that way.
  1451.     MarxMenu comes up black and white when this happens. Add the command
  1452.     MODE CO80 after the offending program and your colors will come back.
  1453.     
  1454.     Q.) Under an OnKey statement, I'm mixing batch file commands and
  1455.     MarxMenu commands (using the "|" (vertical bar)). It seems that all the
  1456.     MarxMenu commands execute first rather than in the order that I
  1457.     specified.
  1458.     
  1459.     A.) Yes, since MarxMenu is a zero "k" menu system, all batch files
  1460.     commands are written to a batch file and executed when MarxMenu exits.
  1461.     It is also important to remember that when you return to MarxMenu that
  1462.     you come back to the beginning of the menu and not the last line you
  1463.     left.
  1464.     
  1465.     Q.) On my Novell network, I get "Error creating BAT file" when users try
  1466.     to run programs from the menu.
  1467.     
  1468.     A.) This is caused when users don't have enough access rights for
  1469.     MarxMenu to create temporary batch files. Use the SET TEMP=directory
  1470.     to point to a directory where the user has full access rights.
  1471.     
  1472.  
  1473.     Computer Tyme * MarxMenu * Users Manual                 Page #12
  1474.     -----------------------------------------------------------------
  1475.     
  1476.     Q.) I'm trying to execute a program and read the DOS errorlevel code and
  1477.     it isn't working. What am I doing wrong?
  1478.     
  1479.     A.) To read a DOS errorlevel code into a ReturnCode you must use the
  1480.     MarxMenu Execute command. You must also set UseCommand to Off and you
  1481.     need to specify the COM or EXE extension. You also can't use the DOS
  1482.     piping or redirection commands.
  1483.     
  1484.     Q.) Can I run Windows with MarxMenu?
  1485.     
  1486.     A.) Yes, MarxMenu works just fine with Windows. It can start Windows and
  1487.     when you exit Windows it comes back to MarxMenu.
  1488.     
  1489.     Q.) When I try to log off a Novell network from the menu I get a
  1490.     "Missing Batch File" error.
  1491.     
  1492.     A.) The reason you get a "Missing Batch File" error is because MARX.BAT
  1493.     is on the network and is no longer accessible after LOGOUT runs. Under
  1494.     MarxMenu the correct way to log off is to create an OFF.BAT file in the
  1495.     SYS:LOGIN directory and run |Logoff under an OnKey command. MarxMenu
  1496.     will automatically find this batch file and run it.
  1497.     
  1498.      Example:
  1499.        OnKey 'L'
  1500.          |LogOff
  1501.     
  1502.     Q.) When I call your BBS I get a lot of arrow characters on my screen.
  1503.     What am I doing wrong?
  1504.     
  1505.     A.) My BBS uses ANSI sequences. Turn on your ANSI or VT100 emulation in
  1506.     your terminal program and it will work just fine.
  1507.     
  1508.     
  1509.      MARXMENU FEATURES
  1510.     
  1511.     The basic idea behind MarxMenu is to display choices to the user, let
  1512.     him select a command, run the program without taking any memory, and
  1513.     return to the menu when done.
  1514.     
  1515.     The way MarxMenu works is that you start it with a batch file which runs
  1516.     MarxMenu. When the user selects an option MarxMenu writes a batch file
  1517.     and quits. The first batch file (MARX.BAT) calls the batch file that
  1518.     MarxMenu created which runs your application. When your application
  1519.     finishes the MARX.BAT file reloads MarxMenu and waits for the user to
  1520.     make a new choice.
  1521.     
  1522.     MarxMenu uses a script language that is designed around being simple to
  1523.     use and to read. The script language is used to paint the screen, wait
  1524.     for the user to input a key, and then write a batch file based on that
  1525.     key. To help you get going, MarxMenu comes with several prewritten
  1526.     sample menus that you can use as templates to make your menus. These
  1527.     templates are somewhat feature rich so that you don't have to figure out
  1528.     very much to get your MarxMenu going. The sample menus are designed to
  1529.     meet the needs of most menu users and are designed to get you up and
  1530.     running quick with as little pain as possible.
  1531.     
  1532.  
  1533.     Computer Tyme * MarxMenu * Users Manual                 Page #13
  1534.     -----------------------------------------------------------------
  1535.     
  1536.     But, MarxMenu is feature rich and has plenty of commands for those of
  1537.     you who want to do something weird. With over 850 commands and growing
  1538.     we have attempted to deal with many problems that users and network
  1539.     supervisors need to solve. So if you want to do something that my menu
  1540.     templates aren't set up to do then you have the power to get in and make
  1541.     MarxMenu do what you want. But it takes a little more effort to make it
  1542.     happen.
  1543.     
  1544.     The stranger you want to get with MarxMenu the more learning and effort
  1545.     it will take. But, unlike all the other menu systems out there, MarxMenu
  1546.     will get as strange as you need it to get. MarxMenu is a programming
  1547.     language targeted at non-programmers and puts the power of a
  1548.     professional programmer into the hands of those who have never written a
  1549.     line of code before. Even though MarxMenu may not be a true compiler or
  1550.     have the execution speed of C or Pascal, MarxMenu supports a far richer
  1551.     command language and a more elaborate method of automatic memory
  1552.     management. With MarxMenu you can write programs that would normally
  1553.     require 30 points higher IQ and used to be limited to the realm of the
  1554.     serious computer nerd - like me!
  1555.     
  1556.     
  1557.      OVERVIEW OF THE MARXMENU SYSTEM
  1558.     
  1559.     MarxMenu is not just another fill-in-the-blank menu system. It is a menu
  1560.     programming language and job control language. It gives you total
  1561.     freedom to do whatever you want, but total freedom has a price. You will
  1562.     need to know and understand how to use a text editor. This isn't
  1563.     difficult if you are familiar with using a word processor. And you will
  1564.     need to have a basic understanding of DOS and how batch files work.
  1565.     
  1566.     With a text editor you can create a menu file which is a text file with
  1567.     an MNU extension. Or, you can copy and then modify the text file
  1568.     QUICK.MNU which displays the menus you see when MarxMenu is executed.
  1569.     This text file contains a set of instructions for MarxMenu to follow.
  1570.     MarxMenu will then read your menu file and run the instructions.
  1571.     
  1572.      A menu file might look as follows:
  1573.     
  1574.      DrawBox 31 5 18 4
  1575.      UseArrows
  1576.      Writeln   '  W - WordStar'
  1577.      Write     '  L - Lotus'
  1578.     
  1579.      OnKey 'W'
  1580.         CD\WORDSTAR
  1581.         WS
  1582.     
  1583.      OnKey 'L'
  1584.         CD\LOTUS
  1585.         LOTUS
  1586.     
  1587.  
  1588.     Computer Tyme * MarxMenu * Users Manual                 Page #14
  1589.     -----------------------------------------------------------------
  1590.     
  1591.     The above example is a fully working MarxMenu program. Just because
  1592.     MarxMenu has over 850 commands doesn't mean you have to use them all.
  1593.     The reason there are so many commands is that people keep calling and
  1594.     asking if we can add such and such. Most of the time we do. That's why
  1595.     the manual gets behind sometimes.
  1596.     
  1597.     The instructions must be from the vocabulary of words that MarxMenu
  1598.     understands. These words make up the command list included in this
  1599.     manual. They must be used precisely as the instructions in this manual
  1600.     tell you to use them. This process is called programming.
  1601.     
  1602.     I know that for many of you the word programming is a scary word. Put
  1603.     your fears at ease, MarxMenu is one of the easiest programming languages
  1604.     there is. It is a little harder than writing batch files and a lot
  1605.     easier than Basic. It requires a working knowledge of DOS and an
  1606.     understanding of writing batch files as explained in your DOS manual.
  1607.     
  1608.     The point that we want to make is, do not let the fear of learning and
  1609.     the fear of programming prevent you from learning to write your own
  1610.     menus. If you have never touched a computer before and are sitting down
  1611.     with your first PC, read the manuals first. Become familiar with the
  1612.     MS-DOS operating system. Learn how to write batch files, make
  1613.     subdirectories, copy files, format floppies, etc. If you don't
  1614.     understand something, ask a friend. All of us had to learn sometime, and
  1615.     there is no such thing as a stupid question.
  1616.     
  1617.     After you have mastered some of the basic concepts of the operating
  1618.     system, then learn MarxEdit. This is the text editor included with your
  1619.     MarxMenu program. Use it to write your own batch files. Then attempt to
  1620.     write your own menus by modifying the sample menus (files with a MNU
  1621.     extension) which come with MarxMenu. Print these menus and study them,
  1622.     referring to this manual or MarxHelp for help on command definitions.
  1623.     You do not have to completely understand them to start making changes.
  1624.     Programming is a trial and error process.
  1625.     
  1626.     A computer, like a musical instrument, is only as good as the player.
  1627.     The more you learn about it the more you'll find it can do. In fact, a
  1628.     computer can help raise your effective IQ as you learn the disciplines
  1629.     of logic and reason. As a hammer is a tool of the hand, enhancing your
  1630.     physical strength, a computer is a tool of the mind, enhancing your
  1631.     mental strength. You will learn that as you develop a relationship with
  1632.     your computer, that you will be able to process information in ways you
  1633.     never dreamed.
  1634.     
  1635.     MarxMenu is an excellent learning tool. By the time you become
  1636.     proficient with the menu language, you will have learned the fundamental
  1637.     concepts behind the MS-DOS operating system. You will find yourself
  1638.     going back and forth between this manual and the DOS manual that came
  1639.     with your computer. When you master the language, you will have enough
  1640.     computing skills to be a real resource in your office environment. In
  1641.     this day and age, knowing how to "make the damn things work" is a key in
  1642.     moving up the corporate ladder.
  1643.     
  1644.  
  1645.     Computer Tyme * MarxMenu * Users Manual                 Page #15
  1646.     -----------------------------------------------------------------
  1647.     
  1648.     If you have sufficient excess income to afford a personal computer, or
  1649.     are in a job that provides you with a workstation, you are smart enough
  1650.     to learn this program. All it requires is that you take the time. You
  1651.     can do it. It is worth your time, and you will make up the time spent in
  1652.     the results you'll get. Good luck and enjoy.
  1653.     
  1654.     
  1655.      WHAT MARXMENU DOES
  1656.     
  1657.     So with hundreds of menus on the market, what makes this one so great.
  1658.     Well, let me tell you about it. MarxMenu is a menu language rather than
  1659.     a fill in the blank kind of menu. MarxMenu gives you total control of
  1660.     your computer system.
  1661.     
  1662.     It is also a job control language allowing you to program processes too
  1663.     difficult to do with batch files. MarxMenu can be used to do anything
  1664.     from overnight batch job processing to generating control scripts for
  1665.     mainframes.
  1666.     
  1667.     Because of it's simple syntax, MarxMenu makes an excellent teaching
  1668.     language putting more programming power in the hands of the student
  1669.     programmer than any other programming language.
  1670.     
  1671.     As a menu, MarxMenu can be as simple or as complex as you want. If you
  1672.     want simple, nothing is easier. If you want POWER, nothing is more
  1673.     powerful. If you want to get really weird, MarxMenu can do really weird.
  1674.     
  1675.     So if you want the menu to remind you to go vote, MarxMenu knows when
  1676.     the first Tuesday after the first Monday in November on even years is.
  1677.     If you are into Astrology, and you want certain menu items to appear
  1678.     only if Mars is in the right place in the sky, MarxMenu can calculate
  1679.     the orbit of Mars for you.
  1680.     
  1681.     MarxMenu can be used to program games, write running software demos and
  1682.     online tutorial programs. It can be used to write testing programs. It
  1683.     can be used to write custom software installation programs. It can be
  1684.     used to assist other applications to make other software more network
  1685.     friendly.
  1686.     
  1687.     MarxMenu has a compiler for high speed execution. Even very large menus
  1688.     come up in under 4 seconds on a 4.77mhz IBM XT on an ArcNet lan. The
  1689.     compiler also provides security in that you can keep your source files
  1690.     separate so no one can alter the menu files.
  1691.     
  1692.  
  1693.     Computer Tyme * MarxMenu * Users Manual                 Page #16
  1694.     -----------------------------------------------------------------
  1695.     
  1696.      THE MARX.BAT FILE
  1697.     
  1698.     In order for MarxMenu to work, a MARX.BAT file must be created. This is
  1699.     done by typing INSTALL. The first thing that INSTALL does is unpack the
  1700.     compressed menu files and documentation files. Then it will bring up the
  1701.     installation menu.
  1702.     
  1703.     The MARX.BAT file looks like this:
  1704.     
  1705.      @ECHO OFF
  1706.      C:\MARX\MARXMENU.EXE %1
  1707.      %MXCMD%
  1708.      MARX %1
  1709.     
  1710.     The first line of MARX.BAT turns the echo off. This may be changed to
  1711.     ECHO ON for debugging purposes. PAUSE commands can be inserted to debug
  1712.     a menu. This allows you to see what's going on.
  1713.     
  1714.     The second line of MARX.BAT runs MARXMENU.EXE. The second parameter %1
  1715.     is the name of the menu file to run. A third parameter can be added to
  1716.     tell MarxMenu to use a specific directory for creating temporary batch
  1717.     files. Otherwise MarxMenu will create temporary batch files in the same
  1718.     directory as MARXMENU.EXE.
  1719.     
  1720.     When the user selects a program to run, MarxMenu writes a temporary
  1721.     batch file which contains within it the commands to run the program.
  1722.     Then MarxMenu writes a command to the environment variable MXCMD to
  1723.     execute the temporary batch file and exits.
  1724.     
  1725.     What it writes depends on the version of DOS you are running. If you are
  1726.     running DOS 3.3 or later, MXCMD is set to CALL <batch>. If you are
  1727.     running an earlier version of DOS then MXCMD is set to COMMAND /C
  1728.     <batch>.
  1729.     
  1730.     Whatever command is written to MXCMD is executed in line 3. This usually
  1731.     calls the temporary batch file that MarxMenu created. This executes your
  1732.     program and returns to MARX.BAT.
  1733.     
  1734.     Line four jumps back to the beginning of the batch file and starts all
  1735.     over. %0 is MARX.BAT and %1 is the name of the menu you are running.
  1736.     
  1737.              MARX.BAT
  1738.              --------   +--MarxMenu Creates--+
  1739.       +----> @ECHO OFF  |                    |
  1740.       |      MARXMENU.EXE %1                 |
  1741.       |      %MXCMD% >--+                    +-> $MX00000.BAT
  1742.       | +--> MARX %1 +  |                        ------------
  1743.       | |            |  +----------------------> CD\WORDSTAR
  1744.       +-|------<-----+                           WS --+
  1745.         |                                             |
  1746.         +-------------------------------------------<-+
  1747.     
  1748.  
  1749.     Computer Tyme * MarxMenu * Users Manual                 Page #17
  1750.     -----------------------------------------------------------------
  1751.     
  1752.      Note: MarxMenu sets MXCMD = CALL $MX00000.BAT
  1753.     
  1754.     You can also tell MarxMenu where to put it's temporary batch files by
  1755.     setting an environment variable TEMP to point to a temporary file
  1756.     directory.
  1757.     
  1758.      Example:
  1759.        SET TEMP=F:\TMPFILES
  1760.     
  1761.     This is compatible with the way DOS 5 and Windows uses temp files.
  1762.     
  1763.     When you exit the menu system. MarxMenu sets MXCMD to MXSTOP. This jumps
  1764.     to a batch file called MXSTOP which gets you out of MARX.BAT. MXSTOP.BAT
  1765.     can be modified to control what happens when MarxMenu is exited.
  1766.     
  1767.     The default MXSTOP.BAT file is as follows.
  1768.     
  1769.      SET MXCMD=
  1770.      SET KSV=
  1771.      REM You can control menu exiting with this file!
  1772.     
  1773.     Note that by adding your own commands to MXSTOP that you can control
  1774.     what happens when you exit. You could loop right back to the menu if you
  1775.     want. Or, you could force a controlled network logoff.
  1776.     
  1777.     I strongly recommend upgrading to DOS 3.3 or later whenever it is
  1778.     possible to do so.
  1779.     
  1780.     The name of the temporary batch file is as follows:
  1781.     
  1782.                       $MX00000.BAT
  1783.                           ||||
  1784.             Shells--------+|++--------Network Station (Hex)
  1785.                       Task Number
  1786.     
  1787.     The five zeros are used for single user versions of MarxMenu. On a network
  1788.     they change as follows:
  1789.     
  1790.     The last two zeros is the station number on the network. This is either
  1791.     read directly from the shell, if you are using Novell, or from the
  1792.     environment variable STATION if you are on another network. The third
  1793.     zero is the task number if you are running DesqView, or from an
  1794.     environment variable TASK if you are running some other multitasker.
  1795.     
  1796.     The second zero is replaced by one less than the number of COMMAND.COM
  1797.     shells you are running. This way if you run COMMAND.COM under MarxMenu
  1798.     and then run MarxMenu again under that, it doesn't get lost when you
  1799.     exit.
  1800.     
  1801.  
  1802.     Computer Tyme * MarxMenu * Users Manual                 Page #18
  1803.     -----------------------------------------------------------------
  1804.     
  1805.     The first zero is for future expansion. In case something comes along
  1806.     that we haven't thought of.
  1807.     
  1808.     If you want to do custom tricks, MarxMenu has an internal variable
  1809.     called MxCmd. Setting this to your own command overrides the way
  1810.     MarxMenu would normally use it.
  1811.     
  1812.     But now you ask, does MarxMenu leave a trail of batch files that will
  1813.     clutter up my drive or network? Not at all. MarxMenu keeps using the
  1814.     same names over and over again. If a user crashed his system, it might
  1815.     leave a batch file but it would be overwritten the next time he used the
  1816.     menu. Not only that, all batch files can be kept in the same directory
  1817.     so cleaning up is as simple as typing DEL $MX*.BAT!
  1818.     
  1819.     By writing to the MXCMD variable you can run an EXE or COM file directly
  1820.     without having to create another batch file.
  1821.     
  1822.      Example:
  1823.         OnKey 'M'
  1824.            |MxCmd = 'RAMMAP'
  1825.     
  1826.     This runs RamMap directly from the MARX.BAT file.
  1827.     
  1828.     Another trick is to run another batch file without the CALL statement.
  1829.     This creates a one-way jump to another batch file.
  1830.     
  1831.     Another debugging feature. You can change the first line of the MARX.BAT
  1832.     file as follows:
  1833.     
  1834.      @ECHO %MXECHO%
  1835.     
  1836.     This allows you to turn the echo on for debugging purposes by typing:
  1837.     
  1838.      SET MXECHO=ON
  1839.     
  1840.     This way you don't have to change the MARX.BAT file to debug. If you use
  1841.     this, make sure that MXECHO is set to either ON or OFF.
  1842.     
  1843.     
  1844.      DROPTO.BAT
  1845.     
  1846.     If you are going to run a shell like COMMAND.COM under MarxMenu it is
  1847.     sometimes better to use DROPTO.BAT which is created during the install
  1848.     process. DropTo allows you to jump from the temporary batch file that
  1849.     MarxMenu creates to DropTo, which deletes the temporary batch file and
  1850.     executes the rest of the command line.
  1851.     
  1852.      Usage: DROPTO %0 COMMAND.COM
  1853.     
  1854.  
  1855.     Computer Tyme * MarxMenu * Users Manual                 Page #19
  1856.     -----------------------------------------------------------------
  1857.     
  1858.     If you are using DropTo inside a MarxMenu, the %0 is automatically added
  1859.     for you.
  1860.     
  1861.      Example:
  1862.         OnKey 'C'
  1863.            DropTo COMMAND.COM
  1864.     
  1865.      DROPTO.BAT
  1866.      ----------
  1867.      DEL %1
  1868.      SET KSV=
  1869.      SET MXCMD=
  1870.      %2 %3 %4 %5 %6 %7 %8 %9
  1871.     
  1872.     Here's how it works:
  1873.     
  1874.          $MX00000.BAT <------deletes this file--------+
  1875.          ------------                                 |
  1876.          DROPTO %0 COMMAND.COM ------------> DEL %1 >-+
  1877.                                              SET KSV=
  1878.                                              SET MXCMD=
  1879.                   %2 executes COMMAND.COM--> %2 %3 %4 %5 %6 %7 %8 %9
  1880.     
  1881.     The advantages are that the temporary batch file is eliminated so if the
  1882.     user never returns to the menu, it leaves no temporary file to clutter
  1883.     up the drive. Also, DROPTO.BAT becomes the pending batch file that is
  1884.     running rather than the temporary file.
  1885.     
  1886.     
  1887.      SUPPORT FOR EARLY DOS VERSIONS
  1888.     
  1889.     There are two main differences between DOS versions earlier than 3.3 and
  1890.     versions 3.3 and above. One is the CALL command for batch files and the
  1891.     other is the way you specify environment space when using COMMAND.COM.
  1892.     
  1893.     I have enhanced the support for early DOS versions (3.1, 3.2). MarxMenu
  1894.     executes COMMAND /C /E:nn (batchfile) >NUL to have one batch file call
  1895.     another. The first two lines of the batch files created are as follows:
  1896.     
  1897.      ECHO OFF
  1898.      CTTY CON
  1899.      ....
  1900.     
  1901.     This eliminates the ECHO OFF from being seen.
  1902.     
  1903.     Also whenever possible, when MarxMenu loads a copy of COMMAND.COM, it
  1904.     adds the /E:nnn command to set the environment space to the same as that
  1905.     of the Master Environment. In version 3.1 it is translated to paragraphs
  1906.     instead of bytes.
  1907.     
  1908.  
  1909.     Computer Tyme * MarxMenu * Users Manual                 Page #20
  1910.     -----------------------------------------------------------------
  1911.     
  1912.     One thing to note in early versions of DOS. If you run a batch file
  1913.     under COMMAND /C and your batch file has SET commands to set environment
  1914.     variables, the changes you make will disappear as soon as you get back
  1915.     to MARX.BAT. Why? Because you loaded another COMMAND.COM and the SET
  1916.     commands set its environment. When this COMMAND.COM ends, it takes its
  1917.     environment with it. Under DOS 3.3 or later, which uses CALL instead of
  1918.     another shell, the SET commands live. (Yet another reason to upgrade).
  1919.     
  1920.     
  1921.      ABOUT ENVIRONMENT VARIABLES
  1922.     
  1923.     I've been talking a lot about environment variables. Some of you out
  1924.     there in novice land don't know what an environment variable is. Many
  1925.     others don't know the intricate secrets handed down from the Great DOS
  1926.     Masters who know all the intricate undocumented features of DOS.
  1927.     
  1928.     Your DOS shell, COMMAND.COM owns an area of memory called the Master
  1929.     Environment. It contains strings in the form Name=Value. Included among
  1930.     those strings are your COMSPEC and your PATH. Your COMSPEC tells DOS and
  1931.     other programs where to find COMMAND.COM. Your PATH tells DOS and other
  1932.     programs what directories to search when loading programs. Another
  1933.     common environment variable is your PROMPT. This controls what your DOS
  1934.     prompt will look like.
  1935.     
  1936.     Environment variables are commonly set using the SET command. This is
  1937.     done by typing SET NAME=VALUE.
  1938.     
  1939.      Example:
  1940.         SET COLOR=BLUE
  1941.     
  1942.     So what does this actually do? Nothing, unless you have a program that
  1943.     reads the environment variables that is looking for one called COLOR.
  1944.     This way, environment variables can be used to leave messages to other
  1945.     programs and control how they behave.
  1946.     
  1947.     Besides leaving messages, environment variables can be accessed by batch
  1948.     files. If you use %NAME% in a batch file, DOS will substitute the VALUE
  1949.     of the variable for the %NAME% expression. And this feature is important
  1950.     to MarxMenu's operation.
  1951.     
  1952.     MarxMenu uses an environment variable called MXCMD. In the MARX.BAT file
  1953.     the third line is %MXCMD%. So MarxMenu controls MARX.BAT by writing
  1954.     values to MXCMD.
  1955.     
  1956.     In order to do this, there must be enough room in the environment for
  1957.     the command to fit. That is why you need to make sure that you have a
  1958.     SHELL command in your CONFIG.SYS to set space for MarxMenu to use.
  1959.     
  1960.     Now so far I've only talked about the Master Environment. That's the one
  1961.     that the first COMMAND.COM owns. Each program that is loaded, including
  1962.     TSR's, gets a copy of the Master Environment in its own environment. This
  1963.     is called the CURRENT Environment.
  1964.     
  1965.  
  1966.     Computer Tyme * MarxMenu * Users Manual                 Page #21
  1967.     -----------------------------------------------------------------
  1968.     
  1969.     One interesting feature of the Current Environment is that it is smaller
  1970.     than the Master Environment. DOS only creates enough space to hold a
  1971.     copy of the space used in the Master Environment and a little more to
  1972.     store the name of the program that is running.
  1973.     
  1974.     If one program executes another program, the environment of the parent
  1975.     program is called the Parent Environment. You will probably never need
  1976.     to deal with the Parent Environment but MarxMenu can access it in case
  1977.     you do.
  1978.     
  1979.     Another environment is the SHELL ENVIRONMENT. This is the one that THEY
  1980.     never talk about. The one you'll never read about in any books. The one
  1981.     you'll never learn about in any DOS classes. This is the one your
  1982.     parents never mentioned.
  1983.     
  1984.     The Shell Environment is normally the same as the Master Environment.
  1985.     But, if you are running more than one level of COMMAND.COM, the Shell
  1986.     Environment is the environment of the last COMMAND.COM in memory. This
  1987.     environment is the most important environment to MarxMenu.
  1988.     
  1989.     So why load up two or more COMMAND.COM's? There are several cases where
  1990.     this could occur. One case is when you want to run COMMAND.COM as a
  1991.     program under MarxMenu. This way you can type EXIT to get back to the
  1992.     menu. If you do this and then run MarxMenu again, you have two levels of
  1993.     COMMAND.COM. In this case, the first COMMAND.COM is the Master
  1994.     Environment and the second COMMAND.COM is the Shell Environment.
  1995.     
  1996.     Another place where more than one COMMAND.COM is used is if you are
  1997.     running Microsoft Windows 3 or DesqView. Both of these programs are able
  1998.     to run a DOS shell. When you do, this is a second level of COMMAND.COM.
  1999.     
  2000.     What is important is that SET commands and %NAME% commands in batch
  2001.     files deal only with the Shell Environment and not the Master
  2002.     Environment.
  2003.     
  2004.     MarxMenu can treat environment variables as if they were MarxMenu
  2005.     variables. By writing to environment variables you can store information
  2006.     that stays there even if you leave MarxMenu and return.
  2007.     
  2008.      Example:
  2009.        Writeln %PATH%
  2010.        %PATH% = 'C:\;C:\DOS;'
  2011.     
  2012.  
  2013.     Computer Tyme * MarxMenu * Users Manual                 Page #22
  2014.     -----------------------------------------------------------------
  2015.     
  2016.      DEALING WITH MULTIPLE DOS SHELLS
  2017.     
  2018.     If you are running more than one level of COMMAND.COM (shelling from
  2019.     Windows, DesqView, Word Perfect Office) and having environment space
  2020.     problems here's a trick. Before you load up your fancy shells, put this
  2021.     in a batch file like your AUTOEXEC.BAT.
  2022.     
  2023.      SET MXCMD=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  2024.     
  2025.     This variable will be trashed by MarxMenu thus freeing up the
  2026.     environment space it occupied. This will not only allow MarxMenu to run
  2027.     but may solve problems with other programs you are running that need
  2028.     environment space as well.
  2029.     
  2030.     Another option is, if you can control how the second shell is run, add
  2031.     the /E switch to the command line of COMMAND.COM to force a larger
  2032.     default environment space.
  2033.     
  2034.      Example:
  2035.         COMMAND.COM /E:400
  2036.     
  2037.     
  2038.      MARXMENU AND TSR CONTROL
  2039.     
  2040.     MarxMenu along with the TSR utilities that come with MarxMenu, can load
  2041.     and unload TSR's under menu control. This is handy when you want to run
  2042.     a big application and need to free up some memory to do it. Since
  2043.     MarxMenu is a zero k menu system, unloading TSR's is possible but it
  2044.     has it's tricks.
  2045.     
  2046.     The problem you run into is that when one batch file calls another batch
  2047.     file, the way MarxMenu normally runs, DOS creates a small batch file
  2048.     control block in memory. This control block stays in memory after the
  2049.     TSR is released creating a region of trapped memory. Although this
  2050.     memory is freed, it isn't usable.
  2051.     
  2052.     The way around it is to jump to the batch file that releases memory
  2053.     instead of calling it. This is done by setting MXCMD to the name of the
  2054.     batch file you want to run. The only problem is that when you jump to
  2055.     the other batch file, it won't automatically return to MARX.BAT. You
  2056.     must therefore end your batch file with a command bringing you back to
  2057.     MARX.BAT.
  2058.     
  2059.      MEMHOG.BAT
  2060.      -----------
  2061.      Rem UnLoad SideKick
  2062.      RELEASE SK
  2063.      CD\MEMHOG
  2064.      MEMHOG
  2065.      MARK SK
  2066.      SK
  2067.      MARX MAIN
  2068.     
  2069.  
  2070.     Computer Tyme * MarxMenu * Users Manual                 Page #23
  2071.     -----------------------------------------------------------------
  2072.     
  2073.     In your MAIN menu:
  2074.     
  2075.      OnKey 'H'
  2076.         |MxCmd = MEMHOG
  2077.     
  2078.     See the documentation file on the TSR utilities disk for more
  2079.     information on how to use MARK and RELEASE.
  2080.     
  2081.     
  2082.      NETWORK USERS:
  2083.     
  2084.     The main thing you have to worry about on a network is to make sure that
  2085.     when MarxMenu creates a temporary batch file, that it is a different one
  2086.     for each user on the network.
  2087.     
  2088.     This is handled several ways. If you are on a Novell network, MarxMenu
  2089.     uses your station number as part of the name for the temporary batch
  2090.     file. If you are not using Novell, then you will need to set an
  2091.     environment variable STATION for each workstation on your net. Each one
  2092.     has to be a different number.
  2093.     
  2094.      Example:
  2095.         SET STATION=5
  2096.     
  2097.     You must ensure that the user has enough access rights to create
  2098.     temporary batch files in the directory selected for temporary batch
  2099.     files. One solution is to create a batch file directory and give all the
  2100.     users full access rights to it.
  2101.     
  2102.     MarxMenu has been run on about every DOS based network that exists. If
  2103.     the network runs at all it will generally run MarxMenu. Among the
  2104.     networks that come to mind are Novell, Lantastic, Banyan, 3COM, Lan
  2105.     Manager, IBM, DECNET, ConCurrent DOS, PCMOS, and SCO VPIX. MarxMenu is
  2106.     running on networks as small as two users to as large as 20,000 users.
  2107.     In fact, the bigger your network, the more you need MarxMenu.
  2108.     
  2109.     If you are running Lantastic and get a "sharing violation" error when
  2110.     two people try running the menu at the same time, try setting
  2111.     MARXMENU.OVR to READ ONLY.
  2112.     
  2113.     
  2114.      NETWORK MENU STRATEGY
  2115.     
  2116.     One of the main features of MarxMenu is the ability to create "smart"
  2117.     menus. This allows you to have a single menu that everybody runs but
  2118.     each user sees different selections based on what their access rights
  2119.     are, what groups they are in, what kind of hardware is available, or
  2120.     what workstation they are on.
  2121.     
  2122.     The group access feature is a very good example of using the power of
  2123.     MarxMenu. The idea here is that for instance under Novell you would put
  2124.     users in groups and have menu selections appear based on group
  2125.     membership. Thus only the accounting department sees the payroll
  2126.     selection.
  2127.     
  2128.  
  2129.     Computer Tyme * MarxMenu * Users Manual                 Page #24
  2130.     -----------------------------------------------------------------
  2131.     
  2132.     On non-Novell networks you can group users by having them in a text file
  2133.     list of members. Then you can read the list and test if they are in the
  2134.     list. You can also read environment variables and control choices based
  2135.     upon the result.
  2136.     
  2137.     The rule with networks is to keep things as consistent and simple as
  2138.     possible. A simple well-documented network is a happy network, and it
  2139.     can make the difference whether you go home on the weekends or stay at
  2140.     the office.
  2141.     
  2142.     
  2143.      USING TRUENAME ON NETWORKS
  2144.     
  2145.     Besides using drive letters, networks use a file and directory naming
  2146.     convention called TrueName. The MarxMenu TrueName function returns the
  2147.     true name of a file. TrueName files are specified as follows:
  2148.     
  2149.      Microsoft Networks:
  2150.        \\SERVER\DIRECTORY\FILE
  2151.     
  2152.      Novell Netware:
  2153.        \\SERVER\VOLUME\DIRECTORY\FILE
  2154.     
  2155.     By using TrueNames you can specify files and directories on the network
  2156.     without having to map drive letters or make redirection list entries. If
  2157.     a TrueName of a string ends in a '\' then it is at the root directory.
  2158.     
  2159.      Example:
  2160.        C:\                ;root of C
  2161.        \\TYME\SYS\        ;root of server
  2162.        \\TYME\SYS\PUBLIC  ;not root directory
  2163.     
  2164.     
  2165.      NOVELL USERS:
  2166.     
  2167.     Novell is the most popular network on the market. We have added many
  2168.     enhancements for Novell networks to support things like logging in and
  2169.     logging out, drive mapping, group support, software metering, and status
  2170.     information.
  2171.     
  2172.     Although Novell is a high quality solid product it has its own
  2173.     "personality" and many undocumented features otherwise known as bugs.
  2174.     Most people who are having trouble with MarxMenu under Novell are really
  2175.     having trouble with Novell. Quite frankly, we do more Novell support
  2176.     than we do MarxMenu support.
  2177.     
  2178.     Having said that, we have two Novell networks. One at the lab and one at
  2179.     home and we love networks. But, we have spent hundreds of hours learning
  2180.     all the tricks. And to save you a phone call, and a lot of time, we've
  2181.     decided to share these tricks here in the manual.
  2182.     
  2183.  
  2184.     Computer Tyme * MarxMenu * Users Manual                 Page #25
  2185.     -----------------------------------------------------------------
  2186.     
  2187.     Some of these tricks are from the Great Network Gurus themselves who are
  2188.     so advanced that they no longer exist in physical form. These people
  2189.     live in another dimension of total mental existence and can only be
  2190.     reached by modem. Some of them hang out on Compuserve.
  2191.     
  2192.     We therefore strongly recommend that if you are a serious Novell user
  2193.     that you join Compuserve and hang out in the Novell section. And just
  2194.     because not everyone on Compuserve is a real person doesn't mean that
  2195.     you should feel uncomfortable asking them any question about your
  2196.     network that you need to ask.
  2197.     
  2198.     
  2199.      THE NOVELL MENU TRANSLATOR
  2200.     
  2201.     One nice bonus with Novell networks is that MarxMenu can translate your
  2202.     Novell menus to MarxMenu. This saves you the time of having to recode
  2203.     your system. What you do is type:
  2204.     
  2205.      MARXMENU NOVTRANS <menu>   <- Right Way
  2206.      MARX NOVTRANS <menu>       <- Wrong Way
  2207.     
  2208.     This translates your Novell MNU file to a MarxMenu file. Your MNU file
  2209.     is renamed with an NOV extension.
  2210.     
  2211.     Once the menu is translated you run it by typing MARX <menu> instead of
  2212.     MENU <menu>. MarxMenu can run Novell's menu better than Novell runs
  2213.     their own.
  2214.     
  2215.     Sometimes the translator isn't perfect and it takes a little tweaking of
  2216.     the original menu file for the translator to work properly. If you have
  2217.     problems translating a menu and can't make it fly, upload a copy to our
  2218.     BBS system and let us take a look at it. You might discover something
  2219.     that we should use to enhance the translator menu itself.
  2220.     
  2221.     One problem some users experience is translating Novell menus with
  2222.     greater than 20 menu options. The Novell menus scroll when there are
  2223.     more options than can be displayed on a single screen. NovTrans
  2224.     translated menus do not support this. When we get calls on this issue,
  2225.     we recommend users to break up their menus into logical groupings,
  2226.     putting applications in one window, utilities in another, etc. If you
  2227.     should experience this problem, use logical groupings to work around it.
  2228.     If you get a "Window Out Of Bounds" error it is probably because you
  2229.     have more choices than will fit on the screen.
  2230.     
  2231.     After you are satisfied with the translation you can then start
  2232.     enhancing your menus by editing the new translated menus. You might want
  2233.     to run QUICKNOV and look at it's features. If you like what you see you
  2234.     can use your editor to cut and paste code from QUICKNOV.MNU into your
  2235.     menus.
  2236.     
  2237.  
  2238.     Computer Tyme * MarxMenu * Users Manual                 Page #26
  2239.     -----------------------------------------------------------------
  2240.     
  2241.     You can also start adding InGroup commands to create conditional menus.
  2242.     Under MarxMenu you can have one single smart menu for everybody instead
  2243.     of a lot of individual menus.
  2244.     
  2245.      Example:
  2246.        if InGroup('ACCOUNTING')
  2247.           AddChoice('Payroll',10)
  2248.        endif
  2249.     
  2250.     The translated menu is set up with a lot of features that you can add
  2251.     that the original Novell menu wouldn't do. These features include
  2252.     software metering and usage logging (See METER.INC for details). You can
  2253.     also control screen blanking and add password security for unblanking
  2254.     the screen. MarxMenu can be set up to log you off the network after a
  2255.     period of inactivity (See CUSTOM.INC for details).
  2256.     
  2257.     The translated menu also allows you to select various look and feel
  2258.     options by selecting NOVELL.INC, BLOCK.INC or GRID.INC. These three
  2259.     files are similar and you can edit them to change the colors of your
  2260.     menu interface.
  2261.     
  2262.     One thing to remember is that when you change an Include file you need
  2263.     to force MarxMenu to recompile the menu. It doesn't automatically
  2264.     recompile like it does when you change the .MNU file. To force MarxMenu
  2265.     to recompile you just type MARXCOMP <menu> or delete the MRX file. (The
  2266.     MRX file is the compiled file that MarxMenu uses to actually run your
  2267.     menus.)
  2268.     
  2269.     
  2270.      LOGGING OUT UNDER MENU CONTROL
  2271.     
  2272.     Logging out under menu control is one of the trickiest things to do. The
  2273.     problem is that as soon as LOGOUT executes, you no longer have access to
  2274.     the network. This means that if you are in a batch file, you are going
  2275.     to get a "Missing Batch File" error, unless the batch file is in the
  2276.     \LOGIN directory.
  2277.     
  2278.     Another problem with logging out is making sure that your COMSPEC is
  2279.     pointing to a COMMAND.COM that is either on the local drive or in the
  2280.     \LOGIN directory. Otherwise you will get a "Cannot load COMMAND.COM"
  2281.     error.
  2282.     
  2283.     Another problem that you need to deal with is that your PATH command
  2284.     needs to be changed so that it doesn't refer to mapped drives that are
  2285.     no longer accessible.
  2286.     
  2287.     If you are logging off with a batch file, the batch file must be in the
  2288.     login directory or a local drive. If it is in the login directory your
  2289.     current drive must be the first network drive (usually F:) and this
  2290.     drive must not be map rooted to any directory.
  2291.     
  2292.  
  2293.     Computer Tyme * MarxMenu * Users Manual                 Page #27
  2294.     -----------------------------------------------------------------
  2295.     
  2296.     What you need to do is create a batch file in the \LOGIN directory
  2297.     called OFF.BAT.
  2298.     
  2299.      Example:
  2300.        F:\LOGIN\OFF.BAT
  2301.     
  2302.      SET COMSPEC=C:\COMMAND.COM
  2303.      LOGOUT
  2304.      C:
  2305.      PATH=C:\DOS
  2306.     
  2307.     To run this file the current directory must be F:\LOGIN. When using the
  2308.     MarxMenu command Logoff, MarxMenu changes to the \LOGIN directory of the
  2309.     first network drive, removes any map roots on this drive, and runs
  2310.     OFF.BAT.
  2311.     
  2312.     Setting up an OFF.BAT file is compatible with MarxMenu's automatic
  2313.     network logoff feature. This is where you can set the amount of time to
  2314.     wait at a menu before it automatically logs you off the network.
  2315.     
  2316.     Another way to logout under MarxMenu is to stuff the LOGOUT command into
  2317.     the keyboard buffer and exit MarxMenu.
  2318.     
  2319.      Example:
  2320.         OnKey ESC
  2321.           |StuffKBD 'LOGOUT' + CR
  2322.           |ExitMenu
  2323.     
  2324.     Another logout trick is to use the LOGOFF utility from the Computer Tyme
  2325.     Network Survival Kit. This program automatically fixes your PATH and
  2326.     COMSPEC after the logoff occurs.
  2327.     
  2328.     
  2329.      LOGGING IN WITH MARXMENU
  2330.     
  2331.     If there is any one thing that's trickier than logging out of a Novell
  2332.     network, its logging in. We have spent MANY hours struggling with Novell
  2333.     trying to get it right and have finally figured it out. Much of this
  2334.     comes from the Novell gurus who hang out on Compuserve and know
  2335.     everything there is to know about Novell.
  2336.     
  2337.     The first thing you need to do is make up your mind that you are going
  2338.     to do it right. The technique here might seem somewhat cumbersome, but
  2339.     it works well and will keep you out of trouble.
  2340.     
  2341.     MarxMenu has the ability to log you into a network, map your drives, and
  2342.     set your environment strings without having to touch a Novell utility to
  2343.     do so. MarxMenu can completely eliminate the need for Novell login
  2344.     scripts. The advantage of using MarxMenu to login is that you have the
  2345.     power of over 850 commands to work with instead of just 25 or so.
  2346.     
  2347.  
  2348.     Computer Tyme * MarxMenu * Users Manual                 Page #28
  2349.     -----------------------------------------------------------------
  2350.     
  2351.      USING NOVELL'S LOGIN
  2352.     
  2353.     For those of you who want to stay with Novell's login program here are
  2354.     some tips to keep you out of trouble, and our tech support lines open.
  2355.     
  2356.     The last command in your system login script needs to be EXIT "batch
  2357.     name". This batch file will be the continuation of your login logic and
  2358.     should end up jumping to the menu system. This is where TSR's can be
  2359.     loaded.
  2360.     
  2361.     Never load a TSR or run the menu from within a login script. Until the
  2362.     login script finishes, LOGIN.EXE is in memory and it uses over 100k.
  2363.     
  2364.     The first rule is don't use personal login scripts unless you have to.
  2365.     The simpler the login, the easier it is to maintain. Try to do as much
  2366.     as possible in the batch file you exit to.
  2367.     
  2368.     MarxMenu can be run from this batch file as a post login processor. In
  2369.     this case MarxMenu isn't being used as a menu but as a programming
  2370.     language that is capable of very powerful login logic. The batch file
  2371.     might look as follows:
  2372.     
  2373.      MARXMENU POST.MNU
  2374.      <load TSR's>
  2375.      MARX MAIN
  2376.     
  2377.     In POST.MNU you can set environment variables, test for directories,
  2378.     write batch files, read user lists, map drives, or any number of things
  2379.     that are useful to the login process.
  2380.     
  2381.     
  2382.      THE CONFIG.SYS FILE
  2383.     
  2384.     The place to start is the place where DOS starts when DOS boots. You
  2385.     MUST create a CONFIG.SYS file on your boot disk. The CONFIG.SYS tells
  2386.     DOS how many files and buffers to create, what device drivers to load,
  2387.     and the size of the Master Environment.
  2388.     
  2389.     Unless you are using special drivers, BUFFERS=40 and FILES=40 is a good
  2390.     place to start. STACKS 0,0 will gain you an extra 3k of RAM. But the
  2391.     most important command is the shell statement. A CONFIG.SYS file might
  2392.     look like this:
  2393.     
  2394.      SHELL=COMMAND.COM /P /E:400
  2395.      BUFFERS=40
  2396.      FILES=40
  2397.      DEVICE=ANSI.SYS
  2398.     
  2399.     This sets up enough environment space to allow MarxMenu and DOS SET
  2400.     commands to work properly. You will also want to load any other device
  2401.     drivers like QEMM386.SYS or 386MAX.SYS to take advantage of other
  2402.     features of your computer. If you don't know about CONFIG.SYS files,
  2403.     read the DOS manual.
  2404.     
  2405.  
  2406.     Computer Tyme * MarxMenu * Users Manual                 Page #29
  2407.     -----------------------------------------------------------------
  2408.     
  2409.     Network Note: If you don't have a local hard disk and are booting from a
  2410.     floppy drive, set BUFFERS=4. If you are booting from a diskless
  2411.     workstation, set BUFFERS=1. BUFFERS are used for local drives only and
  2412.     have no effect on network drives. You save 1k of memory for every 2
  2413.     buffers you don't use.
  2414.     
  2415.     
  2416.      THE AUTOEXEC.BAT FILE
  2417.     
  2418.     After the CONFIG.SYS is loaded the AUTOEXEC.BAT runs next. Here you load
  2419.     up your TSR's and network drivers. There are some important tricks to be
  2420.     used here as well.
  2421.     
  2422.     First of all, never load your network shell from your AUTOEXEC.BAT file.
  2423.     Always have it branch to another batch file called LOADNET to load the
  2424.     network shell. Use the AUTOEXEC.BAT only to load special TSR's and the
  2425.     IPX. An AUTOEXEC.BAT might look like this:
  2426.     
  2427.      @Echo Off
  2428.      Cls
  2429.      IPX
  2430.      SET NET=NETX.COM
  2431.      SET COMSPEC=O:COMMAND.COM
  2432.      LOADNET
  2433.     
  2434.     The two SET commands are very important. The first sets a variable
  2435.     called NET to NETX.COM. This will be used later in LOADNET.BAT. By using
  2436.     this variable, you can have users running many different versions of DOS
  2437.     and still use the same LOADNET.BAT file. You could also use a command
  2438.     SET NET=LOADHI EMSNETX.EXE to take advantage of advanced memory manager
  2439.     software.
  2440.     
  2441.     Another trick is to run BESTNET from the Network Survival Kit. BestNet
  2442.     will automatically pick the best network shell and set the NET
  2443.     environment variable for you. You would use the command BESTNET instead
  2444.     of SET NET=NETX.COM in the AUTOEXEC.BAT file.
  2445.     
  2446.     The SET COMSPEC=O:COMMAND.COM is important if you are booting off of
  2447.     either a floppy drive or a diskless workstation. This assumes that O:
  2448.     will eventually be mapped to a directory on the network that has a valid
  2449.     COMMAND.COM in it.
  2450.     
  2451.     It is important to set the comspec BEFORE loading your NET shell. This
  2452.     prevents a problem where Netware wants to go back to the boot disk even
  2453.     after you change the COMSPEC. We don't know why this works but it does.
  2454.     Trust Me. If you are going to use COMMAND.COM on drive C:, ignore this
  2455.     paragraph.
  2456.     
  2457.     Now we go to the LOADNET.BAT file.
  2458.     
  2459.  
  2460.     Computer Tyme * MarxMenu * Users Manual                 Page #30
  2461.     -----------------------------------------------------------------
  2462.     
  2463.      @Echo Off
  2464.      %NET%
  2465.      SET NET=
  2466.      F:
  2467.      STARTUP
  2468.     
  2469.     The big concept behind LOADNET is that this file is NEVER CHANGED. You
  2470.     put it on all your workstations and in the LOGIN directory and it is
  2471.     EXACTLY THE SAME for every computer in your network. Any changes to
  2472.     individual computers are made in the AUTOEXEC.BAT file.
  2473.     
  2474.     So why is this important? Because if you are running diskless
  2475.     workstations what happens is that while you are booting you have a
  2476.     mythical drive A:. As soon as your NET shell loads this drive
  2477.     disappears out from under you and you end up in F:\LOGIN. If you are
  2478.     running LOADNET.BAT when this happens you drop out of A:LOADNET.BAT and
  2479.     land in the middle of F:\LOADNET.BAT. And if your LOADNET.BAT is exactly
  2480.     the same file as the LOADNET.BAT in the \LOGIN directory, you take off
  2481.     running like the transition never occurred.
  2482.     
  2483.     Even if you are not running on diskless workstations now, you might go
  2484.     to it someday. It also creates good programming habits and helps you
  2485.     boot up cleanly.
  2486.     
  2487.     Let's see what LOADNET does. The first line is @ECHO OFF, that's easy.
  2488.     The second line %NET% executes the network shell that you specified with
  2489.     the SET NET=NETX command. This actually loads the network shell. The
  2490.     third line clears the NET variable freeing up space for other
  2491.     environment variables. F: switches you to drive F if you aren't there
  2492.     already. And finally STARTUP is the name of yet another batch file you
  2493.     jump to.
  2494.     
  2495.     The STARTUP.BAT file controls what happens after LOADNET runs. This file
  2496.     can be freely changed so that LOADNET.BAT can stay the same. This lets
  2497.     you modify what happens AFTER the network shell is loaded.
  2498.     
  2499.     If you are using Novell's login program STARTUP.BAT might look like
  2500.     this:
  2501.     
  2502.      @Echo Off
  2503.      LOGIN
  2504.     
  2505.     
  2506.      USING A MENU FILE TO LOG IN
  2507.     
  2508.     If you are going to use MarxMenu to log in instead of Novell's
  2509.     utilities, you will want to print out the sample file LOGIN.MNU on your
  2510.     MarxMenu disk and study it. Your STARTUP.BAT file might look like this:
  2511.     
  2512.  
  2513.     Computer Tyme * MarxMenu * Users Manual                 Page #31
  2514.     -----------------------------------------------------------------
  2515.     
  2516.      @Echo Off
  2517.      SET BOOTUP=LOGIN
  2518.      MarxMenu Login
  2519.      %BOOTUP%
  2520.     
  2521.     If MarxMenu works correctly, it will change the environment variable
  2522.     %BOOTUP% to point to a file that it creates. If for some reason it fails
  2523.     (you make a mistake in the login), it will execute Novell's login and
  2524.     let you get in and fix it.
  2525.     
  2526.     You will have to modify the LOGIN.MNU for your system. The one that I
  2527.     supply will not work on your system. It is to be used as a sample only
  2528.     and provide ideas for your login menu.
  2529.     
  2530.     One word of caution. After modifying this menu, always run MARXCOMP
  2531.     LOGIN to compile it. Otherwise, if you boot up into it you won't have
  2532.     enough access rights to recompile automatically.
  2533.     
  2534.     
  2535.      NOVELL SEARCH DRIVES
  2536.     
  2537.     MarxMenu and Network Survival Kit files need to be in the search path.
  2538.     You can copy the files into a directory that is already in the search
  2539.     path or create a new directory and add it to the search path. Here is a
  2540.     suggested setup.
  2541.     
  2542.      ---+--- SYSTEM
  2543.         |
  2544.         +--- MAIL
  2545.         |
  2546.         +--- LOGIN
  2547.         |
  2548.         +--- HOME -----+--- FRED
  2549.         |              |
  2550.         |              +--- BARNEY
  2551.         |
  2552.         +--- PUBLIC ---+--- DOS
  2553.                        |
  2554.                        +--- UTIL
  2555.                        |
  2556.                        +--- NSK
  2557.     
  2558.     I would use MAP ROOT and set up the following mapped drives:
  2559.     
  2560.       MAP ROOT H: = \HOME\BARNEY
  2561.       MAP ROOT U: = \PUBLIC\UTIL
  2562.       MAP ROOT N: = \PUBLIC\NSK    ;Network Survival Kit
  2563.       MAP ROOT O: = \PUBLIC\DOS
  2564.       MAP ROOT P: = \PUBLIC
  2565.     
  2566.  
  2567.     Computer Tyme * MarxMenu * Users Manual                 Page #32
  2568.     -----------------------------------------------------------------
  2569.     
  2570.       Set PATH=H:\;U:\;N:\;O:\;P:\;
  2571.     
  2572.     The idea here is that the user's home directory is searched first, then
  2573.     the UTIL directory where various network goodies and batch files are
  2574.     kept. Then the NSK directory where only NSK and menu files are. Then the
  2575.     DOS directory where only your original DOS files are. And finally PUBLIC
  2576.     which contains only Novell utilities.
  2577.     
  2578.     Traditionally, with Novell networks, searches have been set up using the
  2579.     current directories of paths such as:
  2580.     
  2581.       Set PATH=H:.;U:.;N:.;O:.;P:.;
  2582.     
  2583.     I have found that since the addition of the MAP ROOT enhancement that
  2584.     this traditional method is not as flexible.
  2585.     
  2586.     
  2587.      NOVELL DRIVE MAPPING TRICKS
  2588.     
  2589.     Many applications require a search drive mapped to the applications
  2590.     directory. Instead of mapping every letter in the alphabet we have
  2591.     discovered a trick. The idea is to create a floating drive letter that
  2592.     you move into the application that needs it.
  2593.     
  2594.     I map a drive W that I call my work drive. I initially set it to the
  2595.     same directory as my home directory. But when I need an extra search
  2596.     path I set it to point to the application as follows:
  2597.     
  2598.      NovMapRoot('W','P:\WINDOWS')
  2599.     
  2600.     Using this method it isn't necessary to modify your search path. You
  2601.     always search through drive W but where W is moves with your
  2602.     applications. If you need more than one extra search drive you can have
  2603.     several floating drives.
  2604.     
  2605.     You might want to include some drive mapping commands at the beginning
  2606.     of your main menu to put the floating drives back to default
  2607.     directories. This way you don't run into problems where a menu choice
  2608.     doesn't work right after running another menu choice.
  2609.     
  2610.     
  2611.      SETTING FILE ATTRIBUTES
  2612.     
  2613.     Historically Novell has recommended setting file attributes to Shareable
  2614.     and Read Only. This was to deal with DOS 3.0 and earlier and network
  2615.     dumb programs. This is now an obsolete process and if you are in the
  2616.     habit of doing this it's time to quit (unless you are still running DOS
  2617.     version 2 on your workstations).
  2618.     
  2619.     I personally flag all my network files Normal as a way of catching
  2620.     network dumb programs.
  2621.     
  2622.  
  2623.     Computer Tyme * MarxMenu * Users Manual                 Page #33
  2624.     -----------------------------------------------------------------
  2625.     
  2626.     MarxMenu is a network smart product. It therefore isn't recommended that
  2627.     any file flagging be done on Computer Tyme software.
  2628.     
  2629.     
  2630.      NOVELL SEMAPHORES
  2631.     
  2632.     For a detailed explanation of Novell Semaphores, read the Novell
  2633.     manuals. What we've done is to export these functions to MarxMenu. We
  2634.     have implemented them slightly different than Novell did and have hidden
  2635.     all the nasties from you such as semaphore handles. All semaphores are
  2636.     accessed by name only.
  2637.     
  2638.     Here's a brief overview of semaphores. Semaphores are names of shared
  2639.     resources that the server keeps track of. Semaphores have three
  2640.     properties. They have a name, value and number of users. The name can be
  2641.     anything up to 48 characters long. The value is a number from -128 to
  2642.     127. If the value is less than 0, the resource the semaphore represents
  2643.     is considered used up.
  2644.     
  2645.     By opening a semaphore, you increase the number of users by one. By
  2646.     closing it, you decrease the number by one. If a single user opens a
  2647.     semaphore many times, it is only counted as one. When you log out, your
  2648.     semaphores are closed. This is also true if you turn your computer off,
  2649.     but it takes 15 minutes for the server to give up on you.
  2650.     
  2651.     The first user to open a semaphore creates it. The last user to close a
  2652.     semaphore deletes it. When a semaphore is created, a value can be
  2653.     assigned. If a semaphore is opened that already exists, the initial
  2654.     value is ignored.
  2655.     
  2656.     When NovWaitOnSemaphore is called by any user, the value is decremented.
  2657.     If the value is not below zero, NovWaitOnSemaphore returns true.
  2658.     Otherwise it returns false and the value is unchanged. The amount of
  2659.     time that NovWaitOnSemaphore will wait is controlled by the variable
  2660.     NovSemaphoreTimeOut.
  2661.     
  2662.     When NovSignalSemaphore is called by any user, the value is incremented.
  2663.     This allows other users to call NovWaitOnSemaphore and get a True value.
  2664.     
  2665.     NovSemaphoreUsers and NovSemaphoreValue are used to read the status of a
  2666.     semaphore without changing it's value.
  2667.     
  2668.     One of the major differences between how MarxMenu uses semaphores and
  2669.     the way Novell uses them is that normally a semaphore dies when the
  2670.     application finishes. This would normally prevent a zero k menu system
  2671.     from being able to use them. MarxMenu uses an interesting trick where it
  2672.     fools Netware into thinking that the semaphore belongs to a TSR in
  2673.     memory. This allows the semaphore to live.
  2674.     
  2675.  
  2676.     Computer Tyme * MarxMenu * Users Manual                 Page #34
  2677.     -----------------------------------------------------------------
  2678.     
  2679.     Semaphores can be used for software metering. I've changed the
  2680.     semaphores to work with TSRs in upper memory. You no longer need a TSR
  2681.     in low memory for semaphores to live. This improves software metering.
  2682.     
  2683.     
  2684.      USING SEMAPHORES FOR SOFTWARE METERING
  2685.     
  2686.     An example of menu code that uses semaphores for software metering can
  2687.     be found in the file METER.INC. This metering ability is limited to
  2688.     Novell networks only.
  2689.     
  2690.     This software metering module counts how many users are using an
  2691.     application and limits it to a fixed number of users. Thus, you can save
  2692.     money on other software by limiting the number of people who can run an
  2693.     application to the number of copies you own.
  2694.     
  2695.     This can also be used to limit an application to 1 user where the
  2696.     application only works on a network for one user at a time.
  2697.     
  2698.     To use this module, add the line INCLUDE 'METER.INC' to your menu. Then
  2699.     under the OnKey you want to meter:
  2700.     
  2701.      OnKey 'W'
  2702.         |if Limit('WP',6) then Return   ;limit to 6 users
  2703.         WP
  2704.     
  2705.     In the above example, a Word Perfect choice is limited to 6 users. Thus
  2706.     you may have 20 users total but only 6 can run Word Perfect at the same
  2707.     time.
  2708.     
  2709.     The way it works is, MarxMenu creates a semaphore when it runs an
  2710.     application and stores the semaphore name in an environment variable
  2711.     named METER. When the user returns to the menu the semaphore is cleared.
  2712.     If the user turns off their computer in the middle of an application,
  2713.     netware will clear the semaphore within 15 minutes.
  2714.     
  2715.     USAGE LOGGING:
  2716.     
  2717.      OnKey 'W'
  2718.         |LogIt('WordPerfect')
  2719.         WP
  2720.     
  2721.     This will send a log line to the log file that is a comma delimited
  2722.     ascii line with fields as follows:
  2723.     
  2724.      "UserName","Program","Start Time","End Time"
  2725.     
  2726.  
  2727.     Computer Tyme * MarxMenu * Users Manual                 Page #35
  2728.     -----------------------------------------------------------------
  2729.     
  2730.      NETWARE MHS & MARXMENU
  2731.     
  2732.     MarxMenu has the ability to interface to NetWare MHS which allows
  2733.     MarxMenu to send and receive messages. You need to have a copy of
  2734.     NetWare MHS to use this feature which can be purchased from your
  2735.     friendly neighborhood NetWare dealer.
  2736.     
  2737.     MHS stands for Message Handling System and the way it works is that you
  2738.     have a dedicated mail transport computer on the network. This computer
  2739.     is like a mailman and it goes around and looks for outgoing mail every
  2740.     little bit. If it finds mail it reads the address and delivers it.
  2741.     
  2742.     Any application program, such as MarxMenu, need only leave a text file
  2743.     in a special outgoing directory and put an address header on the file.
  2744.     Here's an example of how this is done:
  2745.     
  2746.      Example:
  2747.        var Message
  2748.     
  2749.        {MHS Header}
  2750.     
  2751.        AppendArray(Message,'SMF-70')
  2752.        AppendArray(Message,'FROM:MARC @ CTYME')
  2753.        AppendArray(Message,'TO:VICKI @ CTYME')
  2754.        AppendArray(Message,'SUBJECT:The Princess Called!')
  2755.     
  2756.        {Blank line separates header from message}
  2757.     
  2758.        AppendArray(Message,'')
  2759.     
  2760.        AppendArray(Message,'The Princess needs a ride home from dance')
  2761.        AppendArray(Message,'class and wants to get some money to go')
  2762.        AppendArray(Message,'skating. She wants to know if you can pick')
  2763.        AppendArray(Message,'them up at midnight and if 5 little girls')
  2764.        AppendArray(Message,'can stay over night.')
  2765.     
  2766.        WriteTextFile(MhsSendDirectory + '\' + UniqueFileName,Message)
  2767.     
  2768.     When MarxMenu creates a file in this format, MHS will pick up the file
  2769.     and deliver it. When it's delivered it will be like any other message
  2770.     and will appear in your favorite MHS Mail system. You can also use this
  2771.     feature to notify you when your fax server receives a fax.
  2772.     
  2773.     To receive a message, see the example under MhsReadFile. All MHS
  2774.     commands start with Mhs. By using these MHS features, MarxMenu can be
  2775.     used as a network job server that is triggered by messages sent to it
  2776.     and reports it's results by sending messages.
  2777.     
  2778.  
  2779.     Computer Tyme * MarxMenu * Users Manual                 Page #36
  2780.     -----------------------------------------------------------------
  2781.     
  2782.      UPGRADING MARXMENU
  2783.     
  2784.     When installing an upgraded version of MarxMenu be sure to copy the
  2785.     MARXMENU.EXE, MARXMENU.OVR and MARXCOMP.EXE files into your MarxMenu
  2786.     directory. A very common mistake is not copying the MARXMENU.OVR file.
  2787.     If you forget this file MarxMenu will lock up when you try to run it.
  2788.     If you are on a network and anyone on the network is using the menu you
  2789.     won't be able to copy over MARXMENU.OVR. You will have to wait until
  2790.     after hours or chase everyone out of the menu to install the upgrade.
  2791.     
  2792.     A common mistake occurs when you copy the MarxMenu file into a working
  2793.     directory and someone else has the MARXMENU.OVR file open and you fail
  2794.     to notice that it failed to copy. If MarxMenu starts locking up after an
  2795.     upgrade this is probably why. Make sure the file dates on MARXMENU.EXE
  2796.     and MARXMENU.OVR are the same.
  2797.     
  2798.     After installing the new MarxMenu, all your menu files will have to be
  2799.     recompiled. This should happen automatically, but if you are on a
  2800.     network and the users don't have enough access rights the compile will
  2801.     fail. You can recompile all your network menus as follows:
  2802.     
  2803.      WHEREIS *.MNU|DOLIST MARXCOMP @L
  2804.     
  2805.     If you are using MarxMenu to log into the network then be sure to copy
  2806.     the new MarxMenu files into your LOGIN directory and recompile your
  2807.     LOGIN menu.
  2808.     
  2809.     If you install MarxMenu in one directory and then move it to another you
  2810.     will have to run MARXMENU INST to recreate the batch files for that
  2811.     directory. Make sure that the MarxMenu files are on your PATH.
  2812.     
  2813.     Any time you upgrade, MarxMenu should work as well or better than the
  2814.     previous version. Occasionally we make a mistak so you might want to copy
  2815.     your present NSK directory to another temporary directory until the
  2816.     upgrade is complete and tested. This gives you the ability to go back to
  2817.     the old one should the need arise. This procedure should be followed on
  2818.     software upgrades from other vendors as well.
  2819.     
  2820.     
  2821.      CUSTOMIZING MARXMENU SAMPLE FILES
  2822.     
  2823.     Included in the MarxMenu package are menu files which you can easily
  2824.     modify to execute your programs and perform other functions you desire.
  2825.     Using MarxEdit, the text editor included in this package, you can modify
  2826.     and customize these menu files.
  2827.     
  2828.     Also included to demonstrate the power and versatility of the menu
  2829.     system is a game menu NIM.MNU. This is a game written in the menu system
  2830.     that demonstrates some of the logic functions and programmability of the
  2831.     system.
  2832.     
  2833.  
  2834.     Computer Tyme * MarxMenu * Users Manual                 Page #37
  2835.     -----------------------------------------------------------------
  2836.     
  2837.      Here's a simple example of a menu file:
  2838.      ===================================
  2839.      ClearScreen
  2840.      DrawBox 30 9 25 8
  2841.      Writeln ' 1) Lotus'
  2842.      Writeln ' 2) dBase'
  2843.      Writeln ' 3) Wordstar'
  2844.      Writeln
  2845.      Write 'Select: '
  2846.     
  2847.      OnKey '1'
  2848.         cd\lotus
  2849.         123
  2850.     
  2851.      OnKey '2'
  2852.         cd\db3
  2853.         db3
  2854.     
  2855.      OnKey '3'
  2856.         cd\wordstar
  2857.         ws
  2858.     
  2859.      ====================================
  2860.     
  2861.     Notice in looking at the "OnKey" statements that all you have to do is
  2862.     tell MarxMenu how to get to the program. Although, MarxMenu takes care
  2863.     of reloading itself after exiting a selected program, its does not
  2864.     return to its own subdirectory as many other menu programs do.
  2865.     
  2866.     That means that if you execute a program in another subdirectory, when
  2867.     you come back to the menu, you remain in that subdirectory. If you
  2868.     normally run your applications with a batch file, consider having
  2869.     MarxMenu change directories and execute the program for you. This will
  2870.     eliminate debugging problems caused by the actions of your batch files.
  2871.     
  2872.     
  2873.      MENU ANALYSIS
  2874.     
  2875.     Let's start a simple analysis of the example menu file shown above. The
  2876.     ClearScreen statement simply clears the screen to give us a fresh
  2877.     workspace for the menu. DrawBox is the command to draw a box on the
  2878.     screen. The Writeln command writes a line of text to the screen within
  2879.     the box, then positions the cursor on the next line. The menu text shows
  2880.     the available selection keys that the user has access to.
  2881.     
  2882.  
  2883.     Computer Tyme * MarxMenu * Users Manual                 Page #38
  2884.     -----------------------------------------------------------------
  2885.     
  2886.      ONKEY STATEMENTS
  2887.     
  2888.     The OnKey statements control what is actually executed. OnKey statements
  2889.     also allow you to execute hidden commands when you do not want them to
  2890.     appear on the menu screen. One trick we use is to have an OnKey
  2891.     statement define a key that runs MarxEdit on each users personal menu
  2892.     file. We don't show this key on the menu to keep others from poking
  2893.     around in the file. For additional security a password can also be set
  2894.     up on this key.
  2895.     
  2896.     Normally you enter a line of text as if you were creating a BAT file to
  2897.     run your application. Like batch files, if one of your commands is a
  2898.     batch file, all the statements after it will not execute. To prevent
  2899.     this you can use the CALL command to call a batch file in DOS 3.3 or
  2900.     later, or COMMAND /C in DOS 3.1 and 3.2.
  2901.     
  2902.     Normally, text displayed under an OnKey statement is the same text as
  2903.     the batch file created by MarxMenu. There are some exceptions: If a line
  2904.     starts with a "|" (vertical bar), the line will be interpreted by
  2905.     MarxMenu instead of being written to a batch file. This allows commands
  2906.     such as "PASSWORD" to be used. String variables can be passed as part of
  2907.     a batch command if the name of the string variable starts with a "%"
  2908.     symbol.
  2909.     
  2910.     The spaces preceding the commands under the OnKey statement are
  2911.     for clarity only. They are not necessary for MarxMenu to function
  2912.     properly.
  2913.     
  2914.     Sometimes you need more control over what commands actually go into the
  2915.     batch file that MarxMenu executes. You might want to input test from the
  2916.     user or have the user make a choice from a list that will become part of
  2917.     the batch file that is executed. The BAT command is used to do this.
  2918.     
  2919.     Let's say you want the user to enter the name of a directory to back up
  2920.     to a floppy. Here's how this might be done:
  2921.     
  2922.      Example:
  2923.        OnKey 'B'
  2924.           |DrawBox 15 10 55 3
  2925.           |Write 'Enter Directory: '
  2926.           |BackupDir = Readln
  2927.           |if (LastKey = Esc) or (not ExistDir(BackupDir))
  2928.           |   Return
  2929.           |endif
  2930.           |Bat 'XCOPY ' + BackupDir + ' A: /S'
  2931.           DIR A:
  2932.           PAUSE
  2933.     
  2934.  
  2935.     Computer Tyme * MarxMenu * Users Manual                 Page #39
  2936.     -----------------------------------------------------------------
  2937.     
  2938.     Notice that the commands under the OnKey statement start with a vertical
  2939.     bar. This is because they are MarxMenu commands rather than batch file
  2940.     commands. Remember you are dealing with two languages here. MarxMenu
  2941.     understands MarxMenu commands and DOS understands batch commands. When
  2942.     you are under an OnKey statement all commands are written to a memory
  2943.     buffer which are written to a batch file when MarxMenu exits. DOS then
  2944.     runs this batch file. If you start a command with a vertical bar under
  2945.     an OnKey command then MarxMenu will see the command.
  2946.     
  2947.     The BAT command is a MarxMenu command that allows you to write lines to
  2948.     the batch file that is being created. It allows you more specific
  2949.     control of execution by allowing you to include MarxMenu variables in
  2950.     the DOS command.
  2951.     
  2952.     
  2953.      POPUP MENUS
  2954.     
  2955.     If you want to create a popup menu within a menu you can do so by
  2956.     using a "label". A label is a keyword preceded by a colon. To
  2957.     call the popup menu, place the keyword on a line by itself
  2958.     preceded by a carat (Shift 6). The label will precede the popup
  2959.     menu definition.
  2960.     
  2961.     For example if you have a popup menu to load Smart Software, you could
  2962.     name the PopUpMenu Smart. To bring up the Smart PopUpMenu, define a key
  2963.     in your main menu for Smart like this:
  2964.     
  2965.      OnKey 'S'
  2966.         ^Smart
  2967.     
  2968.     The Smart menu itself might look something like this:
  2969.     
  2970.      :Smart
  2971.      BoxHeaderColor ForeColor BackColor
  2972.      BoxBorderColor Yellow Green
  2973.      BoxInsideColor LCyan Green
  2974.      InverseColor Yellow Red
  2975.      BoxHeader = ' Smart Menu '
  2976.      DrawBox 45 16 20 6
  2977.      UseArrows 2 2 16 3
  2978.      ClearLine 205
  2979.      Writeln
  2980.      Writeln '  Data Base'
  2981.      Writeln '  Spread Sheet'
  2982.      Write   '  Word Processor'
  2983.     
  2984.      OnKey 'D'
  2985.        SM D
  2986.     
  2987.  
  2988.     Computer Tyme * MarxMenu * Users Manual                 Page #40
  2989.     -----------------------------------------------------------------
  2990.     
  2991.      OnKey 'S'
  2992.        |BoxHeaderColor ForeColor BackColor
  2993.        |BoxBorderColor Yellow Green
  2994.        |BoxInsideColor White Green
  2995.        |%1 = PickFile('C:\SMART\SPREAD\*.WS',4,5,17)
  2996.        SM S -ALOAD %1
  2997.     
  2998.      OnKey 'W'
  2999.        |BoxHeaderColor ForeColor BackColor
  3000.        |BoxBorderColor Yellow Green
  3001.        |BoxInsideColor White Green
  3002.        |%1 = PickFile('C:\SMART\WORD\*.DOC',4,5,17)
  3003.        SM W -ALOAD %1
  3004.     
  3005.     While developing the menu, program one of the keys to run your favorite
  3006.     editor on the menu file that you are creating. This way, as soon as the
  3007.     change is made, the results will show when you exit your editor. Since
  3008.     MarxMenu allows versatility in creating the look of your menus, a little
  3009.     trial and error will be required to make things look right.
  3010.     
  3011.     
  3012.      THE CONSOLE
  3013.     
  3014.             +---| Console Functions |---+
  3015.             | 1 - Blank Screen          |
  3016.             | 2 - Set Blank Message     |
  3017.             | 3 - Lock Keyboard         |
  3018.             | 4 - Set Blank Time        |
  3019.             +---------------------------+
  3020.     
  3021.     The Console is a popup menu of built-in functions. To activate the
  3022.     console, press the TAB key. A menu will popup in the upper
  3023.     left-hand-corner of the screen. You can change the position of this
  3024.     popup menu with the ConsolePos function.
  3025.     
  3026.     The first command on the Console screen is Blank Screen. Enter 1 and the
  3027.     screen will blank immediately. It will remain blanked until a key is
  3028.     pressed. Enter 2 on the Console menu and you can change the message
  3029.     displayed on the Blank Screen display.
  3030.     
  3031.     Enter 3 and you will be prompted for a word to lock the keyboard. After
  3032.     you enter the lock word the screen will blank and the keyboard will be
  3033.     locked until the exact lock word is typed. Enter 4 to set the number of
  3034.     minutes to wait before blanking the screen.
  3035.     
  3036.     The lock word feature is handy for times when you must leave the
  3037.     keyboard but don't want menu commands displayed for all to see. It also
  3038.     effectively locks the keyboard so someone can't escape to DOS and test
  3039.     the format command on your hard disk. We run this menu on a Novell
  3040.     Network and don't want to let everyone have access to the Supervisors'
  3041.     power at the touch of the escape key should we leave the keyboard.
  3042.     
  3043.  
  3044.     Computer Tyme * MarxMenu * Users Manual                 Page #41
  3045.     -----------------------------------------------------------------
  3046.     
  3047.      REPOSITIONING THE TOP WINDOW
  3048.     
  3049.     One nice feature you can use to play with the positioning of a window is
  3050.     to turn on the scroll lock. This lets you move the top window around the
  3051.     screen using the arrow keys so you can see how it looks. Then you can go
  3052.     into your menu code and set it permanently.
  3053.     
  3054.     Set Scroll Lock to "on". On most keyboards, a scroll lock LED will light
  3055.     up. Now use the arrow keys to move the top window to any position on the
  3056.     screen. Neat huh?
  3057.     
  3058.     If you want to prevent users from moving the menus around using this
  3059.     feature, add the command, "ScrollMove Off" to your menu.
  3060.     
  3061.     
  3062.      MOUSE SUPPORT
  3063.     
  3064.     If you have a standard mouse driver, MarxMenu will detect it and use it
  3065.     automatically. The left button on the mouse is the same as pressing
  3066.     return. The right button on the mouse is the same as pressing escape.
  3067.     Pressing both buttons on the mouse is the same as pressing the tab key.
  3068.     As of yet, the center button on the mouse is not used for anything.
  3069.     
  3070.     The sensitivity of the mouse can be controlled using the MouseHorizontal
  3071.     and MouseVertical commands or by setting environment variables MOUSEX
  3072.     and MOUSEY.
  3073.     
  3074.     
  3075.      STARTING OFF THE EASY WAY
  3076.     
  3077.     For those of you who want to just get a menu going and don't want
  3078.     anything complicated we have included a menu called the LEVEL1 menu.
  3079.     This menu is a fill-in-the-blank type of menu that will get you going
  3080.     quickly and easily.
  3081.     
  3082.     This menu requires no programming and explains itself. You run it by
  3083.     typing the command:
  3084.     
  3085.      MARX LEVEL1
  3086.     
  3087.     The first thing it does is scan your drive to find the directories. Then
  3088.     you just answer the questions and fill in the menu. This isn't as
  3089.     powerful as programming your own menu, but if you want something quick
  3090.     and dirty, this may be the answer for you.
  3091.     
  3092.     Although the LEVEL1 menu example will work on networks, it is mostly
  3093.     intended for single user use.
  3094.     
  3095.  
  3096.     Computer Tyme * MarxMenu * Users Manual                 Page #42
  3097.     -----------------------------------------------------------------
  3098.     
  3099.      ABOUT VARIABLES
  3100.     
  3101.     One of the most unusual things about MarxMenu is its variables. MarxMenu
  3102.     handles variables differently than any other programming language. For
  3103.     the experienced programmer, this may require some adjustment since it's
  3104.     like getting used to driving a Cadillac after driving a VW Beetle.
  3105.     
  3106.     All variables in MarxMenu are like an empty box that can contain
  3107.     anything. A variable can be a number, boolean, string, file, array, etc.
  3108.     The type of variable is controlled internally and the user need not
  3109.     declare variable types.
  3110.     
  3111.     Variables are created with the VAR command:
  3112.     
  3113.      Var X Y Z
  3114.     
  3115.     If the word VAR is on a line by itself, the following lines, up to a
  3116.     blank line, are considered variable names.
  3117.     
  3118.      Var
  3119.        MyAge
  3120.        YourAge
  3121.        HisAge
  3122.        HerAge
  3123.     
  3124.     Variables are initialized to null values; 0 for Numbers, False for
  3125.     Booleans, and '' for strings. Initial values can be set when the
  3126.     variable is created.
  3127.     
  3128.      Var
  3129.        X = 6
  3130.        MyName = 'Marc'
  3131.        Programmer = True
  3132.     
  3133.     Variables can change variable types. If you write a number to a string
  3134.     variable, the variable changes to a number.
  3135.     
  3136.      X = '234'
  3137.      X = Value(X)
  3138.     
  3139.     This is valid in MarxMenu. X now is a number and contains the value 234.
  3140.     
  3141.     When choosing variable names, it is good programming practice to choose
  3142.     long meaningful names. This allows yourself and others to be able to
  3143.     read menus and follow the logic more easily.
  3144.     
  3145.  
  3146.     Computer Tyme * MarxMenu * Users Manual                 Page #43
  3147.     -----------------------------------------------------------------
  3148.     
  3149.      NUMERIC VARIABLES
  3150.     
  3151.     MarxMenu supports two kinds of numbers, 32 bit integers and real
  3152.     (floating point) numbers. Integers are whole numbers in the range of
  3153.     plus or minus 2,147,483,647. This gives you a wide range of numbers but
  3154.     no fractions.
  3155.     
  3156.     With integers the answers to division are always rounded down thus:
  3157.     
  3158.      7 / 3 = 2
  3159.     
  3160.     Numbers beginning with a '$' indicate base 16 or hex numbers.
  3161.     
  3162.      Example:
  3163.        $20 is the same as 32
  3164.     
  3165.     
  3166.      BOOLEAN VARIABLES
  3167.     
  3168.     Boolean variables are True or False. For example:
  3169.     
  3170.      var Adult
  3171.         Adult = True
  3172.         if not Adult then Write 'You must be 21 to enter.'
  3173.     
  3174.     Boolean values can be set by computation:
  3175.      Example:
  3176.         Adult = Age >= 21
  3177.     
  3178.     In this example the result of Age >= 21 is stored in the variable Adult.
  3179.     
  3180.     If you use a boolean variable by itself, MarxMenu assumes you are
  3181.     setting it to on. Thus:
  3182.     
  3183.       ClearScreenOnExit
  3184.     
  3185.     is the same as:
  3186.     
  3187.       ClearScreenOnExit On
  3188.     
  3189.     
  3190.      STRING VARIABLES
  3191.     
  3192.     String variables are limited to 255 characters.
  3193.     
  3194.     In MarxMenu, string literals are delimited by either single or double
  3195.     quotes.
  3196.     
  3197.      "This can't be yogurt!"
  3198.      'Lincoln said "Four score and seven years ago ..." '
  3199.     
  3200.  
  3201.     Computer Tyme * MarxMenu * Users Manual                 Page #44
  3202.     -----------------------------------------------------------------
  3203.     
  3204.      REAL NUMBERS
  3205.     
  3206.     So what's the difference between ordinary numbers and real numbers?
  3207.     Ordinary numbers in MarxMenu are 32 bit integers. These are numbers
  3208.     whose range is about plus or minus two billion. Integers are whole
  3209.     numbers and do not include any fractions.
  3210.     
  3211.     This is why MarxMenu has included REAL numbers (also known as Floating
  3212.     Point numbers). Real numbers in MarxMenu use BCD (Binary Coded Decimal)
  3213.     with 18 digits of accuracy. They have a range of 10 to the plus or minus
  3214.     63rd power, which means up to 63 zeros either side of the decimal point.
  3215.     This lets you work with very big and very small numbers.  MarxMenu has
  3216.     smart rounding algorithms so that 1.0 / 3 * 3 = 1.0 and not
  3217.     0.999999999999999999 like in most languages.
  3218.     
  3219.     Real numbers are specified by using a decimal point. Thus 5.0 specifies
  3220.     a real number. Most normal MarxMenu functions still require the standard
  3221.     32 bit integers. If you get the error: 'REAL found where INTEGER
  3222.     expected.' You need to use an integer.
  3223.     
  3224.     If an integer is passed where a real is expected, the integer is
  3225.     automatically converted to a real. Thus:
  3226.     
  3227.      6.0 * 3 = 18.0
  3228.     
  3229.     The Value function returns real numbers if a decimal point is used in
  3230.     the string. All the relevant math functions will work with reals as well
  3231.     as comparison operators.
  3232.     
  3233.     MarxMenu supports a variety of functions for real numbers. It has trig
  3234.     functions, log functions, and exponential functions. So why do you need
  3235.     real numbers in a menu program? We don't know. The author had a library
  3236.     and threw them in. We figure someone will need them someday.
  3237.     
  3238.     With real numbers you can do trigonometry calculations like those
  3239.     discovered by the ancient Indian chief Pythagoras who discovered what is
  3240.     now known as Pythagoras's triangle.
  3241.     
  3242.     Now we know that a lot of you were taught in Math class that Pythagoras
  3243.     was Greek. Well, it's just not so. Here is the real story:
  3244.     
  3245.     Pythagoras was an Indian chief who had three wives. Two of the wives
  3246.     were twins and weighed 120 pounds each. And they sat next to Pythagoras
  3247.     on a pair of twin deer hides. But Pythagoras also had a third wife who
  3248.     was a large fat woman who sat across from Pythagoras on a hippopotamus
  3249.     hide. This wife weighed 240 pounds.
  3250.     
  3251.     What Pythagoras discovered was that the squaw on the hypopotamus was
  3252.     equal to the sum of the squaws on the other two hides!
  3253.     
  3254.  
  3255.     Computer Tyme * MarxMenu * Users Manual                 Page #45
  3256.     -----------------------------------------------------------------
  3257.     
  3258.      LOCAL VARIABLES
  3259.     
  3260.     MarxMenu also supports local variables. Variables declared within
  3261.     procedures become local variables. Local variables are just like global
  3262.     variables in that you can use them as multidimensional arrays. When the
  3263.     procedure finishes, all local variables are disposed.
  3264.     
  3265.     If a local variable has the same name as a global variable, the local
  3266.     variable will be used.
  3267.     
  3268.     
  3269.      DATES
  3270.     
  3271.     Dates in MarxMenu are stored as the number of seconds since January 1,
  3272.     1980. This gives MarxMenu a date range of 68 years. By subtracting two
  3273.     dates, you get the number of seconds between two periods of time.
  3274.     
  3275.     MarxMenu has several commands that convert text strings to dates. Here
  3276.     are some examples of how MarxMenu sees text dates.
  3277.     
  3278.      Examples:
  3279.        '4-7-91'                 ;04-07-1991 00:00:00
  3280.        'April 7th, 1991 4:35pm' ;04-07-1991 16:35:00
  3281.        '12:35:23a'              ;04-07-1991 00:35:23
  3282.        '3:15'                   ;04-07-1991 03:15:00
  3283.     
  3284.     If the string can't be converted, then the variable BadDate is set to
  3285.     true.
  3286.     
  3287.     MarxMenu can also convert dates to strings by using the DateString and
  3288.     TimeString commands.
  3289.     
  3290.     
  3291.      PASSING PARAMETERS TO PROCEDURES
  3292.     
  3293.     Procedures can accept parameters by declaring variable names on the same
  3294.     line as the name of the procedure.
  3295.     
  3296.     Procedures can return variables by using the Return command. Return
  3297.     exits the procedure returning the parameters on the same line as the
  3298.     Return statement.
  3299.     
  3300.      Example:
  3301.      Procedure Factorial (X)
  3302.      var Y Z
  3303.         Y = 1
  3304.         Z = 1
  3305.         while Y <= X
  3306.            Z = Y * Z
  3307.            Y = Y + 1
  3308.         endwhile
  3309.         Writeln X ' factorial is ' Z
  3310.      EndProc
  3311.     
  3312.  
  3313.     Computer Tyme * MarxMenu * Users Manual                 Page #46
  3314.     -----------------------------------------------------------------
  3315.     
  3316.     In this example, if you were to use Factorial (5) you would get:
  3317.     
  3318.      5 factorial is 120
  3319.     
  3320.      Another example:
  3321.     
  3322.      Procedure AskYesNo (Question)
  3323.      var YesNo
  3324.         DrawBox (34 - (Length(Question) / 2)) 21 Length(Question) + 14 3
  3325.         TextColor LCyan Blue
  3326.         UseArrows Off
  3327.         Write ' ',Question,' (Y/N) '
  3328.         YesNo = UpperCase(ReadKey)
  3329.         YesNo = YesNo = 'Y'
  3330.         if YesNo
  3331.            Write 'Yes'
  3332.         else
  3333.            Write 'No'
  3334.         endif
  3335.         Wait 50
  3336.         EraseTopWindow
  3337.         Return (YesNo)
  3338.      EndProc
  3339.     
  3340.      if AskYesNo 'Do you want to continue? ' then Continue
  3341.     
  3342.     In this example, MarxMenu draws a box and asks a question and waits for
  3343.     a "Yes" or "No" answer.
  3344.     
  3345.     Arrays can be passed as parameters. Parameters are passed by value not
  3346.     by reference. This means that any changes to the passed parameter do not
  3347.     affect the original value.
  3348.     
  3349.     You can copy an array by assigning it equal to another array.
  3350.     
  3351.      Example:
  3352.        Array1 = Array2
  3353.     
  3354.     This creates Array1 with a copy of all the elements of Array2. The
  3355.     previous contents of Array1 are overwritten.
  3356.     
  3357.     
  3358.      ABOUT CONSTANTS
  3359.     
  3360.     Constants are used to give values meaningful names. By using constants a
  3361.     value can be assigned once and the constant name used throughout the
  3362.     menu program. This way, if you change the value of the constant, all the
  3363.     places where that constant is used automatically change.
  3364.     
  3365.  
  3366.     Computer Tyme * MarxMenu * Users Manual                 Page #47
  3367.     -----------------------------------------------------------------
  3368.     
  3369.     This is good programming practice.
  3370.     
  3371.      Examples:
  3372.     
  3373.      Const States = 50 CPU = '80386 SX' WeekEnd = True
  3374.     
  3375.      or
  3376.     
  3377.      Const
  3378.         States = 50
  3379.         CPU = '80386 SX'
  3380.         WeekEnd = True
  3381.     
  3382.     Using the word STATES is just like using 50. Using CPU is just like
  3383.     using '80386 SX'. But if throughout my menu you use CPU, and then you
  3384.     get a new computer with a 80486, you can just change one line:
  3385.     
  3386.      Const CPU = '80486'
  3387.     
  3388.     And all the places you used CPU changes to '80486'. This is the correct
  3389.     way to program.
  3390.     
  3391.     
  3392.      ABOUT ARRAYS
  3393.     
  3394.     MarxMenu supports multidimensional arrays up to 31 dimensions. Unlike
  3395.     other programming languages, arrays need not be declared. MarxMenu
  3396.     creates arrays "on the fly" and automatically takes care of the array
  3397.     size and number of dimensions.
  3398.     
  3399.     Another unusual feature of MarxMenu arrays is that they are an array of
  3400.     MarxMenu variables. This means that elements of MarxMenu arrays need not
  3401.     be of the same type. Element 1 can be a number, element 2 can be a
  3402.     string and element 3 can be another array.
  3403.     
  3404.     This type of variable management leads to the easy creation of very
  3405.     powerful data structures as you will see.
  3406.     
  3407.      Var X
  3408.     
  3409.      X[1] = 'Element 1'
  3410.      X[2] = 3
  3411.      X[3] = True
  3412.      X[4,6] = 9
  3413.      X[4,7] = 'Ten'
  3414.     
  3415.     These are all valid statements. MarxMenu creates a two dimensional array
  3416.     here. If we now execute the following statement:
  3417.     
  3418.  
  3419.     Computer Tyme * MarxMenu * Users Manual                 Page #48
  3420.     -----------------------------------------------------------------
  3421.     
  3422.      X[4] = X[4,6] + X[2]
  3423.     
  3424.     X[4] becomes equal to 12 but variables X[4,6] and X[4,7] are lost. This
  3425.     is because we have changed an array into a number. MarxMenu
  3426.     automatically handles the deallocation of memory used by this array and
  3427.     its elements and returns the space the used to the memory pool.
  3428.     
  3429.     
  3430.      ABOUT QUALIFIERS
  3431.     
  3432.     Qualifiers are named indexes into arrays. They are used to make the
  3433.     source menu file more readable and more organized.
  3434.     
  3435.     Suppose we are creating a data structure to deal with places in the
  3436.     United States. First we will need an array for States.
  3437.     
  3438.      Var States
  3439.     
  3440.      We want to store some facts about the states.
  3441.     
  3442.      Qualifier
  3443.         Population
  3444.         Bird
  3445.         Motto
  3446.         County
  3447.     
  3448.      State[3].Population = 10000000
  3449.      State[3].Bird = 'Chicken'
  3450.      State[3].Motto = 'Best politicians money can buy!'
  3451.     
  3452.     Now states have counties and counties have county seats, sheriffs, and
  3453.     cities.
  3454.     
  3455.      Qualifer
  3456.         Sheriff
  3457.         Seat
  3458.         City
  3459.     
  3460.      State[3].County[7].Sheriff = 'Buck InBred'
  3461.      State[3].County[7].Seat = 'Possum Trot'
  3462.     
  3463.     Now counties have cities and cities have schools, mayors, churches, and
  3464.     taxes.
  3465.     
  3466.      Qualifier
  3467.         Schools
  3468.         Mayor
  3469.         Churches
  3470.         Taxes
  3471.     
  3472.  
  3473.     Computer Tyme * MarxMenu * Users Manual                 Page #49
  3474.     -----------------------------------------------------------------
  3475.     
  3476.      State[3].County[7].City[9].Schools = 8
  3477.      State[3].County[7].City[9].Mayor = 'Virgil Collins'
  3478.      State[3].County[7].City[9].Churches = 120
  3479.      State[3].County[7].City[9].Taxes = '$100,000,000'
  3480.     
  3481.     The above line is the same as:
  3482.     
  3483.      State[3,4,7,3,9,4] = '$100,000,000'
  3484.     
  3485.     As you can see with qualifiers, it is easy to create multidimensional
  3486.     arrays in a way that is organized and readable.
  3487.     
  3488.     In this example, the qualifier Population became equal to 1. Bird became
  3489.     equal to 2. The variable references, State[3].Bird and State[3,2] are
  3490.     the same. It's just that one is more readable than the other. Qualifiers
  3491.     normally begin by assigning 1 to the first name and 2 to the second,
  3492.     etc. This can be modified.
  3493.     
  3494.      Qualifier
  3495.        Color = 7
  3496.        Size
  3497.        Shape
  3498.     
  3499.     In this case Color becomes the number 7; Size becomes the number 8; and
  3500.     Shape becomes the number 9.
  3501.     
  3502.     
  3503.      POINTER VARIABLES
  3504.     
  3505.     In MarxMenu, variables can point to other variables allowing parameters
  3506.     to be passed to procedures by reference as well as by value. A pointer
  3507.     variable stores the location of another variable. Any time a pointer
  3508.     variable is accessed, MarxMenu acts upon the variable that the pointer
  3509.     variable is pointing to. Pointer variables are set using the Loc
  3510.     (location) command.
  3511.     
  3512.      Example:
  3513.        Var A B C
  3514.        A = Loc B
  3515.     
  3516.     MarxMenu supports complex location pointers and pointers to other
  3517.     pointers. MarxMenu will resolve all references until real data is found.
  3518.     
  3519.      Example:
  3520.        B = Loc A
  3521.        C = Loc B
  3522.        C[5] = 20
  3523.        Writeln A[5]  ;returns 20
  3524.     
  3525.  
  3526.     Computer Tyme * MarxMenu * Users Manual                 Page #50
  3527.     -----------------------------------------------------------------
  3528.     
  3529.     Pointers can also be passed as parameters to procedures. Thus if A is an
  3530.     array of strings we can sort A as follows:
  3531.     
  3532.      Procedure SortTest (TestArray)
  3533.         SortArray(TestArray)
  3534.      EndProc
  3535.     
  3536.      SortTest (Loc A)  ;sorts array A
  3537.     
  3538.     
  3539.      COMMENTS IN MENU FILES
  3540.     
  3541.     MarxMenu has three ways to add comments to a menu file. The first way is
  3542.     with the Comment command.
  3543.     
  3544.      Comment
  3545.      ========================
  3546.      This is a comment block.
  3547.      ========================
  3548.      EndComment
  3549.     
  3550.     All lines up to EndComment are ignored.
  3551.     
  3552.     The second way is with a ';'. All text to the right of the ';'
  3553.     (semicolon) is ignored.
  3554.     
  3555.      BlankTime = 20  ;this is where we set the blank time.
  3556.     
  3557.     The third way is using {} or curly braces. Anything inside the curly
  3558.     braces is ignored. Curly braces can be nested.
  3559.     
  3560.      {All of {this} is a comment.}
  3561.     
  3562.     Comments are ignored by the compiler and cost you nothing in execution
  3563.     speed. Comments can save you a lot of time if you have to come back
  3564.     later and work on your menu, or if someone else has to work on it.
  3565.     Therefore, we encourage you to use comments as much as possible.
  3566.     
  3567.     
  3568.      THE MARXMENU COMPILER
  3569.     
  3570.     MarxMenu reads your MNU files and creates MRX files. These MRX files are
  3571.     a highly digested form of the MNU file that you created. MRX files are
  3572.     the compiled files.
  3573.     
  3574.     When you run MarxMenu, the interpreter MARXMENU.EXE looks for the menu
  3575.     file with the MRX extension. If it doesn't find it, MARXMENU.EXE will
  3576.     automatically load MARXCOMP.EXE and compile the menu. MARXMENU.EXE also
  3577.     compares the file dates of the MNU and the MRX files. If the MNU file is
  3578.     newer than the MRX file, the compiler will be loaded.
  3579.     
  3580.  
  3581.     Computer Tyme * MarxMenu * Users Manual                 Page #51
  3582.     -----------------------------------------------------------------
  3583.     
  3584.     MarxMenu will also force a compile if the MRX file was not compiled by
  3585.     the same version and release date of the MarxMenu you are using. MRX
  3586.     files are not compatible from one version of MarxMenu to the next.
  3587.     
  3588.     You can also force a compile from the command line by typing MARXCOMP
  3589.     <menu>. If you are on a network and using MarxMenu to log you in, make
  3590.     sure you run the compiler if you change your login menu file.
  3591.     
  3592.     Once your menus are written, you can remove the MNU file and
  3593.     MARXCOMP.EXE from the system. This prevents anyone from modifying your
  3594.     menus. The MRX files are scrambled for security. This prevents probing
  3595.     eyes from reading strings in the MRX files.
  3596.     
  3597.     One important thing to remember. Don't lose your original MNU files. The
  3598.     MRX files CANNOT be decompiled. If you lose your original menu files
  3599.     you can't change your menus and the MRX files you have will not be
  3600.     compatible with future releases of MarxMenu.
  3601.     
  3602.     
  3603.      MARXMENU LANGUAGE RULES
  3604.     
  3605.     MarxMenu interpretation is left to right and doesn't have any operator
  3606.     precedence. You can control the order of evaluation by using
  3607.     parentheses.
  3608.     
  3609.      Examples:
  3610.     
  3611.        2 + 3 * 4      ;returns 20
  3612.        2 + (3 * 4)    ;returns 14
  3613.     
  3614.        if A > 4 or B < 6 then ...      ;error
  3615.        if (A > 4) or (B < 6) then ...  ;correct
  3616.     
  3617.     Statements are limited to one line and lines are limited to 200
  3618.     characters.
  3619.     
  3620.     
  3621.      COMPILER COMPATIBILITY
  3622.     
  3623.     The MarxMenu compiler is fully compatible with earlier versions of
  3624.     MarxMenu with a few exceptions. The new compiler does a lot more error
  3625.     checking than earlier versions of MarxMenu and will catch errors that
  3626.     you could previously get away with. Other than that, the only difference
  3627.     you should notice will be a speed increase.
  3628.     
  3629.     Earlier versions of MarxMenu had separate names for variable types. The
  3630.     names $VAR, BVAR, #VAR, and FILEVAR act the same as typing VAR.
  3631.     
  3632.     Very early versions of MarxMenu had a different form of the USEARROWS
  3633.     command that required 4 to 5 numbers after it. If you run into this
  3634.     error, just get rid of the numbers after USEARROWS and it will work
  3635.     fine.
  3636.     
  3637.  
  3638.     Computer Tyme * MarxMenu * Users Manual                 Page #52
  3639.     -----------------------------------------------------------------
  3640.     
  3641.      A WORD ABOUT DOS VERSIONS .....
  3642.     
  3643.     Versions of DOS below 3.3 will cause MarxMenu to use 3.5k of RAM where
  3644.     3.3 DOS and above use no memory. 3.2 DOS is very buggy and should be
  3645.     replaced. 3.1 DOS isn't too bad for bugs but if you're using the BACKUP
  3646.     and RESTORE programs that came with it, you're in trouble. They don't
  3647.     work on large files. You'll find that out if you try to restore one of
  3648.     them.
  3649.     
  3650.     MS-DOS 4.01 seems to be pretty clean provided you have the April '89
  3651.     release or later. To determine if you do, check the file date on
  3652.     COMMAND.COM. Earlier versions of DOS 4.01 have SERIOUS BUGS. If you are
  3653.     running any DOS 4 earlier than April '89 you should upgrade immediately.
  3654.     
  3655.     We are happy to announce that MarxMenu runs under DOS 5.0 with no
  3656.     problems or modifications. One feature implemented is the Idle Loop call
  3657.     which allows MarxMenu to conserve CPU power when it's not doing
  3658.     anything. This makes it work better under DesqView and Windows.
  3659.     
  3660.     Speaking of Windows, MarxMenu is not a Windows program. It can however
  3661.     be used to start Windows programs and can be run under Windows. Windows
  3662.     however is an extremely unstable environment. If for some reason you're
  3663.     having trouble with MarxMenu and Windows, it's Windows fault. In spite
  3664.     of glowing reviews that magazine writers seem compelled to write, I
  3665.     recommend avoiding Windows unless you have a program that requires
  3666.     Windows to run.
  3667.     
  3668.     DR-DOS or EZ-DOS are pretty good also. It is very compatible as long as
  3669.     you don't get too strange with it. We recommend version 3.4 or later.
  3670.     DR-DOS has a nasty COMSPEC bug in versions 5 and 6 when running a second
  3671.     COMMAND.COM shell started from a network drive.
  3672.     
  3673.     4DOS is also pretty good but sometimes some of the advanced features in
  3674.     this product can cause it to behave differently than DOS. This requires
  3675.     extra care when writing your menus.
  3676.     
  3677.     MarxMenu should work correctly on 386 multiuser operating systems such
  3678.     as Digital Research's Concurrent DOS 386 or SCO VPIX DOS emulators and
  3679.     PCMOS. Under these systems you will have to set the TASK environment
  3680.     variable if you are running MarxMenu in multiple tasks.
  3681.     
  3682.     MarxMenu will not run correctly under DesqView 2.26. It will run under
  3683.     2.25 or 3.21. So if you are running 2.26, it needs to be upgraded.
  3684.     MarxMenu contains several support functions for DesqView including
  3685.     DesqView API calls to control the DesqView environment.
  3686.     
  3687.     Although we haven't tested MarxMenu in the OS/2 1.3 compatibility box, we
  3688.     have had good success with MarxMenu under OS/2 2.0. We have been able not
  3689.     only to run DOS programs but OS/2 programs as well. If set up right
  3690.     MarxMenu can spawn multiple tasks of both DOS and OS/2 applications.
  3691.     
  3692.  
  3693.     Computer Tyme * MarxMenu * Users Manual                 Page #53
  3694.     -----------------------------------------------------------------
  3695.     
  3696.     If you are running under some weird DOS and are having problems, try it
  3697.     under "regular" DOS and see if it goes away. If it does, try to find out
  3698.     what it is about your weird DOS that makes it not work right. We are
  3699.     interested in being compatible with as many systems as possible. Let us
  3700.     know if you are having problems. But also, try to get your weird DOS
  3701.     vendors to clean up their act.
  3702.     
  3703.     
  3704.      A WORD ABOUT BUGS .....
  3705.     
  3706.     Although we try to create perfect bug-free software, every now and then
  3707.     we make a mistak. If you find one, let us know and we'll fix it. Our
  3708.     standard is to not only have all the functions of MarxMenu work
  3709.     correctly, but for it to be as intuitive and full featured as possible.
  3710.     
  3711.     
  3712.      TIPS FROM THE MASTER
  3713.     
  3714.     Since MarxMenu is a programming language, I want to talk about what
  3715.     programming is and how it is accomplished. I want to dispel some myths
  3716.     and fears relating to it and introduce you to techniques that will help
  3717.     you write code neatly, quickly, and efficiently. From the outside,
  3718.     programming looks like magic; but once you know a few of the tricks, it's
  3719.     really not too hard.
  3720.     
  3721.     Many of us who were raised on 50's and 60's science fiction television
  3722.     learned that it is the brainy types who deal with computers. It almost
  3723.     gives you the impression that the computer is smart and you are dumb. As
  3724.     you use the computer, it is evaluating you, and if it figures out that
  3725.     its smarter than you, it can get your job and replace you.
  3726.     
  3727.     
  3728.      COMPUTERS DO SIMPLE TASKS
  3729.     
  3730.     A computer is a simple device. It does simple tasks. It just does them
  3731.     very fast and accurately. Computers don't even know basic things like
  3732.     how to write letters on the screen or how to read the keyboard. These
  3733.     are programs that the computer runs. Someone had to program your
  3734.     computer to do even the simplest of tasks.
  3735.     
  3736.     As you learn to use MarxMenu start with the simple menus. The SAMPLE.MNU
  3737.     is a very easy program. Study it and understand how it works. Make a
  3738.     copy of it and begin by changing a single selection to run one of your
  3739.     programs.
  3740.     
  3741.     Once you have changed one selection, change several more. Now MarxMenu
  3742.     is running your programs, and you have made it work. Then try something
  3743.     new. Add more selections. Change the size and position of the box to fit
  3744.     your needs.
  3745.     
  3746.     Take the time to play with it. Try new commands. Build up your menu. Be
  3747.     artistic. The more you work with it, the more you will learn.
  3748.     
  3749.  
  3750.     Computer Tyme * MarxMenu * Users Manual                 Page #54
  3751.     -----------------------------------------------------------------
  3752.     
  3753.      COMPLEX TASKS ARE MADE OF SIMPLE TASKS
  3754.     
  3755.     As you learn more about MarxMenu, move on to QUICK.MNU. Here we use more
  3756.     of the power of the MarxMenu language. As you study this menu, you will
  3757.     notice something. Even though it looks complex, it is really a
  3758.     collection of simple tasks. Understand how the moving windows work.
  3759.     Understand that the pop-up menus are just like the main menu. You will
  3760.     see that it is really not a complex menu at all. It is a lot of simple
  3761.     processes hooked together.
  3762.     
  3763.     That is one of the main concepts behind programming. Complex tasks are
  3764.     built out of simple tasks. As you learn the simple tasks, you will
  3765.     quickly understand how to connect them to accomplish complex tasks.
  3766.     
  3767.     When one sees a castle, one can't help but to be impressed. But castles
  3768.     are made of stones. And you can't build castles until you understand how
  3769.     stones work. Then you realize that a castle is just a bunch of stones
  3770.     hooked together. Programming is just like that.
  3771.     
  3772.     To successfully understand MarxMenu, start at the bottom and work your
  3773.     way up. Each little trick you learn becomes another building block for
  3774.     the next trick. What you start with becomes the foundation for the work
  3775.     that you will eventually produce.
  3776.     
  3777.     
  3778.      LEARNING GOOD PROGRAMMING HABITS
  3779.     
  3780.     Programming has its pitfalls, here we hope to give you some tips that
  3781.     will help you avoid common mistakes. This, we hope will give you a head
  3782.     start on the road to MarxMenu being done right.
  3783.     
  3784.     The first concept is patience. Rome wasn't built in a day. You may not
  3785.     be able to write grand and glorious menus the first try. In fact, you
  3786.     may have trouble getting the damn thing to work at all. As you have
  3787.     probably already noticed, no program is perfect. Sometimes there are
  3788.     errors in the manual. Sometimes it just doesn't work like you expected,
  3789.     or does not work the same way as other programs that are familiar to
  3790.     you.
  3791.     
  3792.     But, once you complete the installation, give it some time and realize
  3793.     that there is a lot of potential here. Approach all challenges with a
  3794.     good attitude.
  3795.     
  3796.     
  3797.      USE LONG NAMES
  3798.     
  3799.     I learned computers the hard way. Out on the streets. Hanging around
  3800.     with other computer nerds in the late 70s who never went to college
  3801.     either. I was known as a Bit Wit. My first real computer was an IMSAI
  3802.     kit. Actually, it wasn't all IMSAI, it was a combination of several kits
  3803.     where no two boards came from the same supplier. It was in an IMSAI box,
  3804.     so I called it an IMSAI.
  3805.     
  3806.  
  3807.     Computer Tyme * MarxMenu * Users Manual                 Page #55
  3808.     -----------------------------------------------------------------
  3809.     
  3810.     It was all supposed to work together the salesman told me the day
  3811.     before they went out of business. And it all did after some redesigning.
  3812.     I was tired of fixing CB radios for a living and decided that
  3813.     computers were here to stay and that I was going to learn about them.
  3814.     
  3815.     With that in mind, everything that went wrong became an opportunity for
  3816.     growth. Not that I looked forward to things not working. I programmed
  3817.     the thing from scratch, loading binary codes into memory from an array
  3818.     of switches on the front panel.
  3819.     
  3820.     The first program I developed ran the EPROM burner, which was the only
  3821.     storage device I had. After I saved this program on a chip, I used it
  3822.     to load the second program onto the chip.
  3823.     
  3824.     Eventually I wrote enough software to talk to the screen and keyboard.
  3825.     Now I could type hex codes on the screen and save them to a chip.
  3826.     Eventually I wrote a tape driver and could save stuff on tape. Later, I
  3827.     traded for a North Star disk drive and had a disk system. One 90k
  3828.     floppy. I thought I was in heaven.
  3829.     
  3830.     I was intimately familiar with my computer. All my programs were in
  3831.     object code with no documentation whatsoever. At that point, a friend of
  3832.     mine, Rufus, turned me on to a language called FORTH.
  3833.     
  3834.     Being an interesting language and very powerful, I typed in the whole
  3835.     compiler in hex and adapted it to work on my system. Once I got Forth
  3836.     up, I wrote a line editor in it. Then I used the line editor to write a
  3837.     screen editor. With the screen editor, I rewrote Forth in Forth. The
  3838.     language compiled itself.
  3839.     
  3840.     From working with Forth (which is as much a religion as a programming
  3841.     language) I learned both good and bad habits. Forth is a write-only
  3842.     language and is almost impossible to read even with the best of
  3843.     documentation. On the other hand, it is as close to the machine as you
  3844.     can get in a high level language.
  3845.     
  3846.     After opening up a computer store in 1984, it became time to make the
  3847.     jump from CP/M to the DOS world. Turbo Pascal offered an interesting
  3848.     solution. They had both a CP/M and DOS compiler. This meant that
  3849.     programs I wrote would run on both machines. The thing that struck me
  3850.     about Pascal was that I could read it better than Forth, and didn't
  3851.     even know the language. Not only that, but I could follow the programs
  3852.     that other people wrote and incorporate their code into my code.
  3853.     
  3854.     The more programs I wrote, the more I came to appreciate a language that
  3855.     was reader friendly. I could manage my programs much easier without
  3856.     having to remember so much. Other people could follow what I was doing
  3857.     easier.
  3858.     
  3859.  
  3860.     Computer Tyme * MarxMenu * Users Manual                 Page #56
  3861.     -----------------------------------------------------------------
  3862.     
  3863.     The important thing I learned was that readability is very important in
  3864.     a program. The more complex the program, the more important readability
  3865.     becomes.
  3866.     
  3867.     One of the main design factors in the MarxMenu language is readability.
  3868.     I could have used short names for the commands and it's not like I
  3869.     like to type. I'm still on just two fingers here. It's just that
  3870.     descriptive names are so much more meaningful when putting simple
  3871.     processes together to create complex processes.
  3872.     
  3873.     The point (finally) is, when creating variable names, or procedure
  3874.     names, use long meaningful names. It may take more typing, but it takes
  3875.     a lot less thinking and remembering later on. Consider the following
  3876.     example in choosing variable names.
  3877.     
  3878.      Var KlingonsDestroyedInBattle
  3879.      Var K
  3880.     
  3881.     In the above example, it is obvious which one tells you more about what
  3882.     information is stored in the variable.
  3883.     
  3884.     
  3885.      USE COMMENTS LIBERALLY
  3886.     
  3887.     Even though MarxMenu is easy to read, it still should be commented. The
  3888.     examples that come with this disk do not have as many comments as they
  3889.     should. Don't do as I do, do as I say. I'm lazy and a bad example.
  3890.     
  3891.     Comments are not compiled in your MRX files and cost you nothing at
  3892.     execution time. In order to make commenting easy, we have provided three
  3893.     separate comment commands. Learn these commands first.
  3894.     
  3895.     Every menu should include a title comment. This should include the name
  3896.     and phone number of the person who wrote it. If you have a problem with
  3897.     a menu and you send it to us, we expect a title comment. That way we can
  3898.     call you about it.
  3899.     
  3900.      Comment
  3901.      ====================================================================
  3902.     
  3903.      This comment was created by Marc Perkel 1-417-866-1222
  3904.     
  3905.      Last Updated: 01-28-90
  3906.     
  3907.      This form of comment block is better than using ';' because not using ;
  3908.      allows you to turn your word wrap feature on and do some professional
  3909.      looking editing in the comment block. This kind of comment block should
  3910.      be at the beginning of each and every menu you create.
  3911.     
  3912.  
  3913.     Computer Tyme * MarxMenu * Users Manual                 Page #57
  3914.     -----------------------------------------------------------------
  3915.     
  3916.      The top and bottom bars are for looks only and are not necessary to the
  3917.      comment. I strongly encourage you to use bars and do things for looks
  3918.      in source code. Looks are very important and you should put as much
  3919.      care into your comments as you do in writing a business letter.
  3920.     
  3921.      If you learn MarxMenu well, your source code may be part of your next
  3922.      job interview as you move up the corporate ladder. So you want it to
  3923.      look good.
  3924.     
  3925.      By the way, if you upload your menus to my bulletin board, I expect a
  3926.      comment block at the top of your menu with your phone number so I can
  3927.      get back to you.
  3928.     
  3929.      ====================================================================
  3930.      EndComment
  3931.     
  3932.     
  3933.      INDENT YOUR CODE
  3934.     
  3935.     As programs get more complex, it gets harder to match the IFs with the
  3936.     ELSEs and the ENDIFs. This is where indenting comes in. It creates a
  3937.     logical grouping of statements and you can easily see what goes with
  3938.     what.
  3939.     
  3940.      Procedure IfDemo
  3941.         IF <condition>
  3942.            <statement>
  3943.            <statement>
  3944.         ELSEIF <condition>
  3945.            <statement>
  3946.         ELSEIF <condition>
  3947.            <statement>
  3948.            <statement>
  3949.         ELSE
  3950.            <statement>
  3951.            <statement>
  3952.            WHILE <condition>
  3953.               <statement>
  3954.               <statement>
  3955.            ENDWHILE
  3956.            <statement>
  3957.         ENDIF
  3958.         <statement>
  3959.      EndProc
  3960.     
  3961.     You can easily see how this helps you follow what you are writing. Now
  3962.     here's a new trick. If you are using an IF, and plan to use an ELSE and
  3963.     an ENDIF, on the line under the IF statement, type in your ELSE and
  3964.     ENDIF lines. Then go back and insert your statements in between these
  3965.     lines. This will help you avoid forgetting the ENDIF or getting mixed up
  3966.     as to which IF matches which ELSE.
  3967.     
  3968.  
  3969.     Computer Tyme * MarxMenu * Users Manual                 Page #58
  3970.     -----------------------------------------------------------------
  3971.     
  3972.     A similar trick can be done with parens and brackets. When typing a left
  3973.     paren, type the matching right paren with it. Then fill in the code you
  3974.     want to put inside the parens or brackets.
  3975.     
  3976.     
  3977.      FOR DUPLICATE TASKS, USE PROCEDURES
  3978.     
  3979.     As menus become longer and more complex, many times you are duplicating
  3980.     a process that you have already written. Although it is easy to copy a
  3981.     block of code, it is better to create a procedure.
  3982.     
  3983.     With procedures, the process is put in one place and is given a name.
  3984.     Preferably a long meaningful name. Once this procedure is defined and
  3985.     named, it can be used as if it were part of the MarxMenu language. This
  3986.     makes menus smaller and easier to read. It is also a way for you to
  3987.     combine small processes into large processes. Procedures can be built
  3988.     using other procedures.
  3989.     
  3990.     Once you have a process figured out and working in a procedure, the
  3991.     whole process becomes a black box with a name that you can use
  3992.     elsewhere. The whole process is reduced down to a name that just works!
  3993.     
  3994.     Another advantage of procedures is that if circumstances change and the
  3995.     procedure needs to be modified, you only make a change one place in your
  3996.     menus, and everything that uses that procedure is automatically changed.
  3997.     This makes menu maintenance easier.
  3998.     
  3999.     
  4000.      DON'T PROGRAM YOURSELF INTO A CORNER
  4001.     
  4002.     Using the above techniques will allow you to write very complex menu
  4003.     systems. Failing to use these techniques can limit what you can
  4004.     accomplish. There is a term called "programming yourself into a corner"
  4005.     which refers to a program that is so poorly written, that it can't be
  4006.     modified to accommodate changes and improvements.
  4007.     
  4008.     The height of your programming abilities depends on the foundation on
  4009.     which they are built. You must avoid rushing to the top without first
  4010.     creating a firm foundation on which to build. Good technique is the
  4011.     foundation for good programming. You will have to learn it eventually,
  4012.     it is more efficient to do it right than it is to do it over.
  4013.     
  4014.     Adopting good programming habits reminds me of my favorite light bulb
  4015.     joke:
  4016.     
  4017.     Q. How many psychologists does it take to change a light bulb?
  4018.     
  4019.     A. Only one, but the light bulb has to want to change.
  4020.     
  4021.  
  4022.     Computer Tyme * MarxMenu * Users Manual                 Page #59
  4023.     -----------------------------------------------------------------
  4024.     
  4025.      FOR THE POWER USER:
  4026.     
  4027.     I originally wrote MarxMenu on a dare. I said that in one afternoon I
  4028.     could write a better menu system than one of the most popular menu
  4029.     systems. I met the challenge and then found that there is a lot of
  4030.     demand for power in a menu system. Friends started asking for this and
  4031.     that feature and this program has gone far beyond what I ever intended.
  4032.     
  4033.     The demand for more features has outpaced my ability to keep up with the
  4034.     documentation standards that I expect from other software packages that
  4035.     I buy. Please bear with me; If you find any errors in the manual, or
  4036.     bugs in the program, please let me know and we'll try to correct any
  4037.     problems.
  4038.     
  4039.     I also appreciate your suggestions for improvements. Many of the
  4040.     features included are a result of requests you have made. Many of you
  4041.     are using this program in ways I never dreamed.
  4042.     
  4043.     The main design philosophy behind this product is POWER and Flexibility.
  4044.     I am also committed to keeping the source code as readable as possible.
  4045.     I am loyal to the concept of using NO RAM. None of MarxMenu stays
  4046.     resident. Because of this I can claim that if you are having some kind
  4047.     of problem, it's not the fault of MarxMenu being resident, because
  4048.     MarxMenu is not resident. Also, using NO RAM allows loading of TSR's
  4049.     (memory resident programs) from the menu.
  4050.     
  4051.     For computer consultants, MarxMenu is an excellent way to make money.
  4052.     You can provide your clients with professional looking menu systems
  4053.     customized (by you) to fit their needs. You can provide complex menu
  4054.     structures not possible with any other menu system. And, because
  4055.     MarxMenu uses NO RAM, you don't have to worry about conflicts between
  4056.     MarxMenu and any other software product.
  4057.     
  4058.     Although MarxMenu is copyrighted, the program is not copy protected.
  4059.     There is nothing to prevent you from making hot copies and giving them
  4060.     away to all your clients. I would like to point out that when you give
  4061.     away something you should be selling you lose respect from your clients
  4062.     and attract those who expect you to work for free. You will make more
  4063.     money if you play by the rules. My best and most profitable clients use
  4064.     no hot software whatsoever. Think about it.
  4065.     
  4066.     
  4067.      WHERE MARXMENU IS HEADING
  4068.     
  4069.     MarxMenu will continue to grow and develop. Because MarxMenu is an
  4070.     overlaid program I have the ability to add as many features as I want
  4071.     without slowing down load or processing speed. In fact MarxMenu is 10
  4072.     times as fast today as it was in 1989 and its vocabulary of commands has
  4073.     grown 20 times as well.
  4074.     
  4075.  
  4076.     Computer Tyme * MarxMenu * Users Manual                 Page #60
  4077.     -----------------------------------------------------------------
  4078.     
  4079.     Most of the new features I add to MarxMenu are a result of your
  4080.     requests. Feel free to call me and make suggestions as to what you want
  4081.     to see in MarxMenu. Often my biggest problem in adding new features is
  4082.     getting companies to release information. Thus, if you want something
  4083.     new and I have to go to IBM, Novell, or Microsoft to get information
  4084.     sometimes it takes a while. So if you have any pull with some of these
  4085.     vendors and will help me put the squeeze on them, I'd appreciate it.
  4086.     
  4087.     I'm often asked the question, what other operating systems will I
  4088.     support? Will there be a Windows version? An OS/2 version? Unix?
  4089.     
  4090.     Let me say first that my primary commitment is to the OS that most
  4091.     people actually use, and that is DOS. I am not moved by the industry
  4092.     politics. I focus on the systems that make computers and networks
  4093.     actually work.
  4094.     
  4095.     So for those of you who are asking the question "Will there be a Windows
  4096.     version of MarxMenu?" The answer is no. The reason is, in my view,
  4097.     windows is too unstable a platform in which to develop code for. As I
  4098.     see it, Windows is a programmer angry environment and is fatally flawed
  4099.     by design. I consider this path a mistake and a mistake that I am not
  4100.     going to make.
  4101.     
  4102.     Will there be an OS/2 version? No. IBM made a lot of promises that they
  4103.     didn't keep. I lobbied hard to get IBM to add some features to OS/2 to
  4104.     allow DOS programs to control the OS/2 environment and talk to the OS/2
  4105.     kernal. This would have allowed MarxMenu, as a DOS program to control
  4106.     OS/2 programs. The response was that IBM wants people to move away from
  4107.     DOS and refused to add the necessary features. The Borland compilers
  4108.     that were supposed to be ready when OS/2 was released don't exist.
  4109.     
  4110.     Will there be a Univell version? Maybe. If Novell doesn't make the same
  4111.     mistakes as IBM and Microsoft have and provide a migration path then
  4112.     maybe there will.
  4113.     
  4114.     
  4115.      A WORD TO WRITERS AND REVIEWERS
  4116.     
  4117.     MarxMenu is a multi-level product fulfilling the needs of a large
  4118.     variety of computer users. It is difficult to compare this product on a
  4119.     feature-to-feature basis. This is because MarxMenu has about 10 times as
  4120.     many features as any other menu system. These features allow this
  4121.     product to target a very broad variety of computer users, from the
  4122.     novice user, who will only use the LEVEL1 or QUICK menus, to large
  4123.     companies with hundreds of file servers controlled through the MarxMenu
  4124.     language.
  4125.     
  4126.     One common mistake that writers make when evaluating MarxMenu, is in the
  4127.     area of ease of use. If you are looking for ease of use, stick with the
  4128.     simple menus and the self-configuring menus such as the LEVEL1, QUICK
  4129.     and QUICKNOV examples. By looking at it this way, MarxMenu will be as
  4130.     easy to use as any other menu system out there and can be compared for
  4131.     similar features. Even though MarxMenu supports complex commands, it is
  4132.     not necessary to use them in simple menus.
  4133.     
  4134.  
  4135.     Computer Tyme * MarxMenu * Users Manual                 Page #61
  4136.     -----------------------------------------------------------------
  4137.     
  4138.     If you are doing a comparative review, please let us know on what basis
  4139.     you are making comparisons. This way we can assist you by providing you
  4140.     accurate information in the area of your interest. If you are looking
  4141.     for simple, we can show you simple; if you are looking for power, we can
  4142.     show you power.
  4143.     
  4144.     On the other hand, if you are reviewing power tools and network
  4145.     utilities, you might want to look at the Network Survival Kit and not
  4146.     just MarxMenu. So if you only have a copy of MarxMenu, give us a call
  4147.     and we will get you the latest and greatest.
  4148.     
  4149.     In addition to our software, we also have color prints and color slides
  4150.     available as well as product literature and sample reviews. These are
  4151.     available to make your job easier and help you make those deadlines.
  4152.     
  4153.     MarxMenu tends to be best reviewed as a long article rather than a short
  4154.     one. It is very good if you have a lot of space to fill. With a long
  4155.     article, you can get really in depth with what MarxMenu is able to do.
  4156.     
  4157.     Any publication which reviews any of my products gets a site license to
  4158.     that product whether we like the review or not. Our position is that if
  4159.     you are using MarxMenu yourself, you will get to know it better.
  4160.     
  4161.     Any questions you have about any of my products, feel free to call. The
  4162.     main thing we ask is that you get the product name, price, our address,
  4163.     and our phone number right.
  4164.     
  4165.     
  4166.      SECURITY ISSUES
  4167.     
  4168.     Different users have different security needs that range from none to
  4169.     extreme. If you are in the none category, then you can skip this
  4170.     chapter. But if you need all the security you can get, then read on.
  4171.     
  4172.     First of all, DOS is not a secure operating system. There are various
  4173.     third party programs out there but what I'm going to cover here is how
  4174.     to make DOS secure as possible working with what you get with DOS.
  4175.     
  4176.     The first thing to do is add the command BREAK=OFF to your CONFIG.SYS
  4177.     file. This prevents programs from breaking out of batch files. Avoid
  4178.     using commands that are internal DOS commands like DIR from inside a
  4179.     menu or inside batch files. Use the D.EXE program instead.
  4180.     
  4181.     Use the LockWord option in the screen blanker so that if a menu is left
  4182.     unattended, it will not be accessible to just anyone walking up to a
  4183.     machine. The LockWord command requires the user type a password to
  4184.     release the screen blanker. If you are on a Novell network, you can use
  4185.     the UseNovPassword command. This forces the user to type their Novell
  4186.     password to unblank the screen.
  4187.     
  4188.  
  4189.     Computer Tyme * MarxMenu * Users Manual                 Page #62
  4190.     -----------------------------------------------------------------
  4191.     
  4192.     If a menu choice accesses sensitive materials, then put a password on
  4193.     it. Also, make sure the SUPERVISOR user has a password. There are many
  4194.     times I've walked up to a server and logged in as supervisor and got
  4195.     right in. Make sure that intruder detection is set on. If you don't know
  4196.     what intruder detection is, read the Novell manuals.
  4197.     
  4198.     You can also use the LogoffTime command to log users off the network
  4199.     after a given amount of inactivity. This also helps kick people off so
  4200.     that you can upgrade MarxMenu from time-to-time. (MARXMENU.OVR can't be
  4201.     updated on a network unless all users are out of the menu.)
  4202.     
  4203.     If you have applications that allow you to shell to DOS, you can prevent
  4204.     them from getting to DOS by changing your COMSPEC to point to something
  4205.     other than COMMAND.COM. You could also rename COMMAND.COM in case a
  4206.     program is looking for this file by name. If this doesn't work for you
  4207.     then you can use the COMSP.EXE program to do the same thing.
  4208.     
  4209.     Another defense is to lock the door to the computer room at night and
  4210.     teach employees security policies and make sure they use them. Security
  4211.     policies include such rules as not having your password written on a
  4212.     stick-em note stuck on the side of your monitor.
  4213.     
  4214.     If you are on a network, buy diskless workstations. People can't copy
  4215.     files on or off a workstation that doesn't have a disk drive. It helps keep
  4216.     viruses off your server and lets the network administrators control what
  4217.     is and isn't on the network.
  4218.     
  4219.     
  4220.      KEEPING USERS IN THE MENU
  4221.     
  4222.     Some people need to keep users in the menu and prevent them from
  4223.     escaping to a command line no matter what. There are several things you
  4224.     need to do to accomplish this. The first thing is to use BREAK.SYS to
  4225.     prevent breaking out of batch files. Then you use a shell statement to
  4226.     load COMMAND.COM temporary instead of permanent. Then you use COMSP.EXE
  4227.     to prevent programs from shelling out to DOS.
  4228.     
  4229.     
  4230.      USING BREAK.SYS
  4231.     
  4232.     MarxMenu comes with a device driver called BREAK.SYS. This program
  4233.     enhances the BREAK ON and BREAK OFF functions of DOS to prevent users
  4234.     from using CTRL-C to get out of batch files.
  4235.     
  4236.     Unlike all the other similar programs this one is smart. It only kills
  4237.     CTRL-C if you are in COMMAND.COM but allows your applications to see
  4238.     CTRL-C. And, it only uses about 400 bytes of RAM.
  4239.     
  4240.     All you have to do is add a line to your CONFIG.SYS file:
  4241.     
  4242.  
  4243.     Computer Tyme * MarxMenu * Users Manual                 Page #63
  4244.     -----------------------------------------------------------------
  4245.     
  4246.     DEVICE=BREAK.SYS
  4247.     
  4248.     If you are using BREAK.SYS with QEMM or other memory manager, load the
  4249.     memory manager first.
  4250.     
  4251.     BREAK.SYS can be enabled or disabled by using the BREAK ON and BREAK OFF
  4252.     commands either from the command line or from batch files.
  4253.     
  4254.     Although BREAK.SYS is better than DOS, it isn't perfect. There are still
  4255.     situations where you can break out of batch files. If it is important
  4256.     not to break out then you can use it as follows:
  4257.     
  4258.     DEVICE=BREAK.SYS /C
  4259.     
  4260.     Using it this way the CTRL-C key is completely disabled. Your
  4261.     application software will not get any CTRL-C.
  4262.     
  4263.     BREAK.SYS has another switch /T that works like /C except that once you
  4264.     execute BREAK ON then it returns to smart CTRL-C handling. The idea here
  4265.     is that more often you need bullet proof protection while the system is
  4266.     booting up, but after going to the main menu you can switch to smart
  4267.     protection. At the end of your bootup batch files add the lines:
  4268.     
  4269.     BREAK ON
  4270.     BREAK OFF
  4271.     
  4272.     This will switch BREAK.SYS into smart mode checking.
  4273.     
  4274.     BREAK.SYS has another feature that makes BREAK ON work better. If you
  4275.     use it like this:
  4276.     
  4277.     DEVICE=BREAK.SYS /B
  4278.     
  4279.     Then when you run BREAK ON and the users presses CTRL-\ it will break
  4280.     you out of programs you might otherwise be stuck in. This feature is
  4281.     great for software developers to use when testing code.
  4282.     
  4283.     
  4284.      USING THE SHELL= COMMAND
  4285.     
  4286.     If you really want to make it impossible to break out to DOS then change
  4287.     the SHELL= statement in your CONFIG.SYS file to read:
  4288.     
  4289.     SHELL=COMMAND.COM /E:400 /C AUTOEXEC.BAT
  4290.     
  4291.     With this command, if they get out of the batch file it locks the system
  4292.     up. In some cases this is better than letting the user get access to the
  4293.     command line.
  4294.     
  4295.  
  4296.     Computer Tyme * MarxMenu * Users Manual                 Page #64
  4297.     -----------------------------------------------------------------
  4298.     
  4299.     To use this feature you need to stay in a steady stream of batch files
  4300.     all the way to the menu. If you ever exit or break out of the batch
  4301.     files the system locks up. Without the /P switch, COMMAND.COM is never
  4302.     loaded permanent. So if AUTOEXEC and the batch file that they jump to
  4303.     ever finishes the computer locks up. You can't break out to COMMAND.COM
  4304.     because there is no COMMAND.COM to break out to.
  4305.     
  4306.     If you try to use this with Novell's LOGIN.EXE then you won't be able to
  4307.     use the 'EXIT <string>' command in your login script. This is because
  4308.     EXIT will exit to DOS and lock up. You will need to create a LOG.BAT
  4309.     file as follows:
  4310.     
  4311.      LOG.BAT
  4312.      =======
  4313.      :Start
  4314.      LOGIN
  4315.      REM ** Stay in loop till LOGIN succeeds **
  4316.      if ErrorLevel 1 goto Start
  4317.      ...
  4318.      <other startup commands>
  4319.      ...
  4320.      Marx MainMenu
  4321.     
  4322.     To get to a command line using this system you will need to run
  4323.     COMMAND.COM or DOLIST.EXE from the menu. In the case of COMMAND.COM you
  4324.     will run:
  4325.     
  4326.      COMMAND.COM /E:400
  4327.     
  4328.     This ensures that this second COMMAND.COM has enough environment space
  4329.     to allow for SET commands.
  4330.     
  4331.     
  4332.      CONDITIONAL STATEMENTS
  4333.     
  4334.     MarxMenu has a full complement of conditional statements. They are as
  4335.     follows:
  4336.     
  4337.      IF->ELSE->ENDIF           Where, IF [condition]
  4338.                                          statement
  4339.                                          statement
  4340.                                       ELSE
  4341.                                          statement
  4342.                                          statement
  4343.                                       ENDIF
  4344.     
  4345.      IF->THEN                  Where, IF [condition] THEN statement
  4346.     
  4347.      IF->ELSE->ELSEIF->ENDIF   Where, IF [condition]
  4348.                                          statement
  4349.                                          statement
  4350.                                       ELSEIF [condition]
  4351.                                          statement
  4352.                                          statement
  4353.                                       ELSEIF [condition]
  4354.                                          statement
  4355.  
  4356.     Computer Tyme * MarxMenu * Users Manual                 Page #65
  4357.     -----------------------------------------------------------------
  4358.     
  4359.                                          statement
  4360.                                       ELSE
  4361.                                          statement
  4362.                                          statement
  4363.                                       ENDIF
  4364.     
  4365.         REPEAT->UNTIL          Where, REPEAT
  4366.                                          statement
  4367.                                          statement
  4368.                                       UNTIL [condition]
  4369.     
  4370.         WHILE->ENDWHILE        Where, WHILE [condition]
  4371.                                          statement
  4372.                                          statement
  4373.                                       ENDWHILE
  4374.     
  4375.         PROCEDURE->ENDPROC     PROCEDURE (name)
  4376.                                          statement
  4377.                                          statement
  4378.                                ENDPROC
  4379.     
  4380.         LOOP->ENDLOOP          LOOP (number)
  4381.                                          statement
  4382.                                          statement
  4383.                                ENDLOOP
  4384.     
  4385.     
  4386.      ENVIRONMENT VARIABLES USED BY MARXMENU
  4387.     
  4388.     MarxMenu uses a variety of environment variables to control various
  4389.     MarxMenu functions. Many of these variables are optional.
  4390.     
  4391.      Set MouseX=(Number)
  4392.     
  4393.     Sets the horizontal sensitivity of the mouse. Default is 15.
  4394.     
  4395.      Set MouseY=(Number)
  4396.     
  4397.     Sets the vertical sensitivity of the mouse. Default is 25.
  4398.     
  4399.      Set MxEcho=(On/Off)
  4400.     
  4401.     If you set the first line of MARX.BAT to @ECHO %MXECHO% then by setting
  4402.     the environment variable MxEcho to ON or OFF, you can control the echo
  4403.     in the MARX.BAT file without having to edit it. This allows you to do
  4404.     diagnostics on a network without messing up other users.
  4405.     
  4406.      Set Temp=(Directory)
  4407.     
  4408.  
  4409.     Computer Tyme * MarxMenu * Users Manual                 Page #66
  4410.     -----------------------------------------------------------------
  4411.     
  4412.     Normally, MarxMenu creates temporary batch files in the same directory
  4413.     as MARXMENU.EXE. If you set TEMP to a directory, MarxMenu will use this
  4414.     directory instead. This complies with Windows / DOS 5.0 standards.
  4415.     
  4416.      Set MxCmd=(Command)
  4417.     
  4418.     MarxMenu uses MXCMD to control what the MARX.BAT file executes. You must
  4419.     have enough environment space available for MarxMenu to use.
  4420.     
  4421.      Set KSV=
  4422.     
  4423.     MarxMenu stores a series of keystrokes in the KSV variable when
  4424.     SavePosition is On.
  4425.     
  4426.      Set STATION=(Number)
  4427.     
  4428.     If you are on a network that is not Novell, then you should set this
  4429.     variable to a unique number for each station between 0 and 255.
  4430.     
  4431.      Set TASK=(Number)
  4432.     
  4433.     If you are running a multi-tasking operating system other than DesqView,
  4434.     and MarxMenu is running more than one task, then set an environment
  4435.     variable TASK to a unique number for each task.
  4436.     
  4437.     MarxMenu also accesses your COMSPEC variable and your PATH variable when
  4438.     executing programs.
  4439.     
  4440.     
  4441.      MARXMENU DATABASE FUNCTIONS
  4442.     
  4443.     Well, after talking about it for years, MarxMenu now includes a strong
  4444.     set of database tools. The database is based on Novell's Btrieve
  4445.     interface. Thus it has the reliability of proven database technology. We
  4446.     are pushing Btrieve to the limit and then some in order to get the
  4447.     requirements needed from a database engine.
  4448.     
  4449.     Btrieve is primarily a fixed length database engine with the ability to
  4450.     add a single variable-length field on the end of a record. When using
  4451.     MarxMenu with Btrieve, we typically store MarxMenu-style variables in
  4452.     the variable-length section and reserve the fixed-length section for key
  4453.     fields only. While we recommend you consider this approach you are free
  4454.     to develop and use any data models you prefer.
  4455.     
  4456.     You will notice several unusual things about MarxMenu as a database.
  4457.     We decided that the square model or relationally-linked square model is
  4458.     to limiting. You can do square model databases if you want to, but the
  4459.     experience of getting rid of the square model is like an animal being
  4460.     let out of a cage for the first time. It's a little scary at first.
  4461.     
  4462.  
  4463.     Computer Tyme * MarxMenu * Users Manual                 Page #67
  4464.     -----------------------------------------------------------------
  4465.     
  4466.     When you create a MarxMenu Btrieve database you may define all your
  4467.     fields, if you want, but you are only required to define the fields that
  4468.     will be used as key fields. You will need to define the fields type, and
  4469.     for key fields the key properties.
  4470.     
  4471.     When data is written to a file the data is passed as a MarxMenu array.
  4472.     The first elements of the array have to match the fixed portion of your
  4473.     structure, normally your key fields. Any elements after the key fields
  4474.     are written in MarxMenu format to the variable-length section of the
  4475.     record. Thus, after the key fields you can do whatever you want. Here is a
  4476.     list of some of the flexible features.
  4477.     
  4478.      1) Records do not have to contain the same fields or the same number of
  4479.         fields. You can have 20 fields in one record and 5 fields in the
  4480.         next one. There are no rules that the data in one field of a record
  4481.         has to be of the same data type as the same field of the previous
  4482.         record.
  4483.     
  4484.      2) Records can contain MarxMenu-style arrays. Thus if you are using a
  4485.         phone field as an array of phone numbers you can store as many phone
  4486.         numbers in that field as you want. MarxMenu can support arrays
  4487.         within arrays of up to 30 levels within a single record.
  4488.     
  4489.      3) Since MarxMenu supports writing MarxMenu-style variable structures
  4490.         to database records, you need not have to specify the type of data,
  4491.         the data size, or the structure of the data before you access the
  4492.         file. If you want to write data you just do it.
  4493.     
  4494.     Use of the Btreive commands require that you have Btrieve 5.10 or later.
  4495.     You will need to have the Btrieve NLM running on the server and
  4496.     BRREQUEST.EXE running on the workstation to use this database in
  4497.     client-server mode, or BTRIEVE.EXE running on the workstation if you are
  4498.     not running in client-server mode. All the Btreive database commands
  4499.     start with the BTRV prefix.
  4500.     
  4501.     To use BTRIEVE.EXE load it with the /E switch as follows:
  4502.     
  4503.      BTRIEVE /E
  4504.     
  4505.     Only network versions of MarxMenu contain the BTRV database commands,
  4506.     the single user version is not equiped with this feature.
  4507.     
  4508.     At the time of printing of this manual the Btrieve database commands are
  4509.     new. For more details, new commands, and examples look in the
  4510.     MARXREAD.ME file and the MarxHelp program.
  4511.     
  4512.  
  4513.     Computer Tyme * MarxMenu * Users Manual                 Page #68
  4514.     -----------------------------------------------------------------
  4515.     
  4516.      ADDITIONAL INFORMATION
  4517.     
  4518.     MarxMenu is a growing product with additional features and enhancements
  4519.     being added all the time. Therefore, the manual will never be completely
  4520.     current.
  4521.     
  4522.     Whenever new features are added, the MARXREAD.ME file is updated to show
  4523.     you the new additions since the manual was printed. These changes are
  4524.     also added to the MarxHelp program so that the online help is always
  4525.     kept current with the released software.
  4526.     
  4527.     
  4528.      COMPUTER TYME ON COMPUSERVE
  4529.     
  4530.     The Computer Tyme Section of the Novell Vendor Forum is your window to
  4531.     the body of additional services available on Compuserve. Many services
  4532.     complement specific applications. Others add a new dimension to business
  4533.     endeavors. Still others cater to personal interests, from aviation to
  4534.     Zinfandel wines. Some of these services include:
  4535.     
  4536.     INVEST WISELY - Speed stock purchases and sales with convenient
  4537.     electronic brokerage services. View stock trends online, research
  4538.     investment possibilities, or transfer data from Compuserve for use in
  4539.     your favorite spreadsheet package.
  4540.     
  4541.     TAKE A TRIP - Compare airline schedules and fares on Compuserve. Find
  4542.     the least expensive flight or best time to fly. Book your tickets
  4543.     online, or pass information on to your travel agent.
  4544.     
  4545.     DO YOUR HOMEWORK - Turn hours of research into minutes online, with
  4546.     hundreds of national and international databases representing diverse
  4547.     specializations. Avoid lengthy library searches by pulling up abstracts
  4548.     and full articles directly online.
  4549.     
  4550.     BE INFORMED - Turn to Compuserve's online news service for daily news
  4551.     from the associated Press' national and international wires, United
  4552.     Press International's national and regional wires, The Washington Post,
  4553.     Reuters, and other reputable sources. The Executive News Service scans
  4554.     these wires for articles on topics you select, then clips and saves them
  4555.     for reading at your leisure.
  4556.     
  4557.     DON'T PASS THIS UP - As a Computer Tyme customer, you're entitled to a
  4558.     free Introductory Membership to Compuserve, including:
  4559.     
  4560.     1) A FREE on month membership to access all of Compuserve's Basic
  4561.     Services.
  4562.     
  4563.     2) A $15 introductory usage credit to explore the Computer Tyme Section
  4564.     of the Novell Vendor Forum and Compuserve's other Extended and Premium
  4565.     Service offerings.
  4566.     
  4567.  
  4568.     Computer Tyme * MarxMenu * Users Manual                 Page #69
  4569.     -----------------------------------------------------------------
  4570.     
  4571.     3) A complimentary subscription to Compuserve Magazine, Compuserve's
  4572.     monthly computing magazine.
  4573.     
  4574.     For those of you who are using Novell networks, the best place to get
  4575.     Novell technical support is in the many forums that Novell provides on
  4576.     Compuserve. In fact, it has been my experience that the support on
  4577.     Compuserve is significantly better than what Novell provides directly.
  4578.     If you are a serious Novell user, you definitely need to be on
  4579.     Compuserve. That's where the real Novell support is.
  4580.     
  4581.     To start connecting with Computer Tyme, Novell, and other Compuserve
  4582.     members call 800-524-3388 and ask for representative #419. If you are
  4583.     already a Compuserve member, enter GO COMPTYME at any ! prompt.
  4584.     
  4585.     
  4586.      MARXMENU COMMANDS
  4587.     
  4588.     MarxMenu contains a rich set of commands. They are listed here
  4589.     alphabetically and by command category. You don't have to learn them all
  4590.     so don't let the size of the list scare you.
  4591.     
  4592.     In the following command list, words contained within ( ) are command
  4593.     parameters that must be included after the menu command. The numeric
  4594.     range for the <column> parameter is 1 - 80 decimal, and for the <row>
  4595.     parameter the range is 1 - 25, 43, or 50 decimal depending on how many
  4596.     lines your monitor displays.
  4597.     
  4598.     
  4599.      | (Vertical Bar)
  4600.     
  4601.     Forces MarxMenu interpretation under an OnKey Command. If not for the |
  4602.     (Vertical Bar), the command under an OnKey would be written to a batch
  4603.     file. The | is only used under OnKey commands.
  4604.     
  4605.      Example:
  4606.        OnKey 'S'
  4607.          |password 'hello' 3 4
  4608.          ECHO Type EXIT to return to menu
  4609.          COMMAND.COM
  4610.     
  4611.        OnKey 'X'
  4612.          |if UpperCase(ReadEnv('USERNAME')) = 'SUPERVISOR'
  4613.            SYSCON
  4614.          |else
  4615.          |  SecurityBreach('You do not have access to this function!')
  4616.          |endIf
  4617.     
  4618.     Category: Misc
  4619.     
  4620.  
  4621.     Computer Tyme * MarxMenu * Users Manual                 Page #70
  4622.     -----------------------------------------------------------------
  4623.     
  4624.      ( : Operator
  4625.     
  4626.     Starts logical interpreter grouping.
  4627.     
  4628.     Used to force evaluation of an expression other than the normal left to
  4629.     right order.
  4630.     
  4631.      Example:
  4632.        2 * 3 + 2     evaluates to  8
  4633.        2 * ( 3 + 2 ) evaluates to  10
  4634.     
  4635.     See Also: )
  4636.     
  4637.     Category: Misc
  4638.     
  4639.     
  4640.      ) : Operator
  4641.     
  4642.     Ends logical interpreter grouping.
  4643.     
  4644.     See Also: (
  4645.     
  4646.     Category: Misc
  4647.     
  4648.     
  4649.      * : Operator
  4650.     
  4651.     Multiplies two numbers.
  4652.     
  4653.      Example:
  4654.        4 * 6 ;returns 24
  4655.     
  4656.     Category: Math Float
  4657.     
  4658.     
  4659.      + : Operator
  4660.     
  4661.     Adds two numbers or two strings.
  4662.     
  4663.      Example:
  4664.        "Hello" + " " + "World"  ;returns "Hello World"
  4665.        2 + 2 ;returns 4
  4666.     
  4667.     The plus operator can also used to concatinate arrays or concatinate
  4668.     values to arrays.
  4669.     
  4670.      Example:
  4671.        X[1] = 1
  4672.        X[2] = 2
  4673.     
  4674.        Y[1] = 3
  4675.        Y[2] = 4
  4676.     
  4677.  
  4678.     Computer Tyme * MarxMenu * Users Manual                 Page #71
  4679.     -----------------------------------------------------------------
  4680.     
  4681.        Z = X + Y     ;returns an array containing [1,2,3,4]
  4682.        Z = X + "A"   ;returns an array containing [1,2,'A']
  4683.        Z = "A" + X   ;returns an array containing ['A',1,2]
  4684.     
  4685.     Category: Math String Float Array
  4686.     
  4687.     
  4688.      - : Operator
  4689.     
  4690.     Subtracts two numbers.
  4691.     
  4692.      Example:
  4693.        7 - 4 ;returns 3
  4694.     
  4695.     Category: Math Float
  4696.     
  4697.     
  4698.      / : Operator
  4699.     
  4700.     Divides two numbers.
  4701.     
  4702.      Example:
  4703.        6 / 3 ;returns 2
  4704.     
  4705.     Category: Math Float
  4706.     
  4707.     
  4708.      < : Operator
  4709.     
  4710.     Less Than - Compares two numbers or strings.
  4711.     
  4712.      Example:
  4713.        3 < 4 = True
  4714.        'AB' < 'CD' ;returns True
  4715.     
  4716.     Category: Math String Float
  4717.     
  4718.     
  4719.      <= : Operator
  4720.     
  4721.     Less Than or Equal - Compares two numbers or strings.
  4722.     
  4723.      Example:
  4724.        3 <= 4 = True
  4725.        'AB' <= 'CD' ;returns True
  4726.     
  4727.     Category: Math String Float
  4728.     
  4729.  
  4730.     Computer Tyme * MarxMenu * Users Manual                 Page #72
  4731.     -----------------------------------------------------------------
  4732.     
  4733.      <> : Operator
  4734.     
  4735.     Not Equal - Compares two numbers or strings.
  4736.     
  4737.      Example:
  4738.        3 <> 4 = True
  4739.        'AB' <> 'CD' ;returns True
  4740.     
  4741.     Category: Math String Float
  4742.     
  4743.     
  4744.      = : Operator
  4745.     
  4746.     Equal - Compares two numbers or strings.
  4747.     
  4748.      Example:
  4749.        3 = 4 = False
  4750.        'AB' - 'CD' ;returns False
  4751.     
  4752.     Category: Math String Float
  4753.     
  4754.     
  4755.      > : Operator
  4756.     
  4757.     Greater Than - Compares two numbers or strings.
  4758.     
  4759.      Example:
  4760.        3 > 4 = False
  4761.        'AB' > 'CD' ;returns False
  4762.     
  4763.     Category: Math String Float
  4764.     
  4765.     
  4766.      >= : Operator
  4767.     
  4768.     Greater Than or Equal - Compares two numbers or strings.
  4769.     
  4770.      Example:
  4771.        3 >= 4 = False
  4772.        'AB' >= 'CD' ;returns False
  4773.     
  4774.     Category: Math String Float
  4775.     
  4776.     
  4777.      Abs : Number
  4778.     
  4779.     Returns the absolute value of a number. The absolute value is the value
  4780.     of the number without the sign.
  4781.     
  4782.      Example:
  4783.         Abs(-6) ;returns 6
  4784.     
  4785.  
  4786.     Computer Tyme * MarxMenu * Users Manual                 Page #73
  4787.     -----------------------------------------------------------------
  4788.     
  4789.     Category: Math Float
  4790.     
  4791.     
  4792.      Actual
  4793.     
  4794.     If you want to read or write to a variable directly that is referencing
  4795.     another variable I have provided the command Actual. Actual overrides
  4796.     any pointers set by the command Loc.
  4797.     
  4798.      Example:
  4799.         Dispose Actual B
  4800.         Actual B = 5
  4801.     
  4802.     See Also: Loc
  4803.     
  4804.     Category: Variable
  4805.     
  4806.     
  4807.      Alias
  4808.     
  4809.     Alias (name) = (string)
  4810.     This is a compiler level text substitution command. When (name) is
  4811.     defined as (string) whenever you use (name) it is the same to the
  4812.     compiler as if (string) were typed there.
  4813.     
  4814.      Example:
  4815.        Alias TwoPlusThree = "(2 + 3)"
  4816.        .
  4817.        .
  4818.        .
  4819.        2 * TwoPlusThree = 10
  4820.        .
  4821.        Writeln TwoPlusThree
  4822.     
  4823.     Writeln TwoPlusThree is the same as Writeln (2 + 3)
  4824.     
  4825.     Category: Misc
  4826.     
  4827.     
  4828.      AllowAbort (On/Off)
  4829.     
  4830.     MarxMenu was written to allow processes to be aborted and in a very
  4831.     smooth way eliminating the need for the user to deal with complicated
  4832.     error logic. In some cases this has gotten in the way of specific
  4833.     control when the user presses the escape key or other error occurs.
  4834.     
  4835.     If AllowAbort is set to Off, MarxMenu will continue on to the next
  4836.     command. You can then test LastKey to see if the escape key was pressed.
  4837.     If the user presses escape a nul string is returned.
  4838.     
  4839.     See Also: AllowEsc
  4840.     
  4841.  
  4842.     Computer Tyme * MarxMenu * Users Manual                 Page #74
  4843.     -----------------------------------------------------------------
  4844.     
  4845.     Category: Misc
  4846.     
  4847.     
  4848.      AllowEsc (On/Off)
  4849.     
  4850.     Several MarxMenu commands such as PickOne, PickMany and PickFile allow
  4851.     you to press escape to abort. If you turn AllowEsc Off then the escape
  4852.     key is ignored. This forces the user to make a choice.
  4853.     
  4854.     See Also: AllowAbort
  4855.     
  4856.     Category: Misc
  4857.     
  4858.     
  4859.      And : Operator
  4860.     
  4861.     Returns logical And if operators are boolean; or bitwise And if
  4862.     operators are numeric.
  4863.     
  4864.      Example:
  4865.        if (Month = Dec) and (Day = 25) then Writeln 'Merry Christmas!'
  4866.        7 and 3 = 3  ;0111 and 0011
  4867.     
  4868.     Note: The parentheses are necessary because MarxMenu interprets from
  4869.     right to left.
  4870.     
  4871.     See Also: Or Xor Not
  4872.     
  4873.     Category: Math Boolean
  4874.     
  4875.     
  4876.      AnsiWindows (On,Off)
  4877.     
  4878.     If AnsiWindow is set to On, MarxMenu interprets Ansi escape codes in a
  4879.     window.
  4880.     
  4881.     See Also : VT100mode
  4882.     
  4883.     Category : Display, Modem
  4884.     
  4885.     
  4886.      AppendArray (Array,Value)
  4887.     
  4888.     AppendArray appends Value to the end of an array. The number of elements
  4889.     is increased by one. It is not used to append two arrays "end to end".
  4890.     
  4891.      Example:
  4892.        var X
  4893.        X[1] = 'TEST1'
  4894.        AppendArray(X,'TEST2')
  4895.     
  4896.        Loop X
  4897.           Writeln X[LoopIndex]
  4898.        EndLoop
  4899.     
  4900.  
  4901.     Computer Tyme * MarxMenu * Users Manual                 Page #75
  4902.     -----------------------------------------------------------------
  4903.     
  4904.      This Prints:
  4905.        TEST1
  4906.        TEST2
  4907.     
  4908.     Category: Array
  4909.     
  4910.     
  4911.      ApplicationMemory : Number
  4912.     
  4913.     Returns the number of bytes of memory available to an application when
  4914.     MarxMenu exits out to the MARX.BAT file. This is the actual amount of
  4915.     RAM available to your application.
  4916.     
  4917.     See Also: FreeMemory
  4918.     
  4919.     Category: Memory
  4920.     
  4921.     
  4922.      ArcTan (Radians) : Real
  4923.     
  4924.     Returns the ArcTangent of a real.
  4925.     
  4926.     Category: Math Float
  4927.     
  4928.     
  4929.      ArrayInsert (Array,Position,Count)
  4930.     
  4931.     ArrayInsert inserts space in Array at location Position for Count
  4932.     locations.
  4933.     
  4934.      Example:
  4935.        var A
  4936.        Loop 5
  4937.           A[LoopIndex] = LoopIndex
  4938.        EndLoop
  4939.        ArrayInsert(A,3,1)
  4940.        A[3] = 10
  4941.     
  4942.        Array A will be [1 2 10 3 4 5]
  4943.     
  4944.     Category: Array
  4945.     
  4946.     
  4947.      AssignList (2D Array)
  4948.     
  4949.     AssignList reads the network assign list table and return a 2
  4950.     dimensional array containing the local names and the network names.
  4951.     
  4952.      Example:
  4953.        var X
  4954.        AssignList (X)
  4955.     
  4956.  
  4957.     Computer Tyme * MarxMenu * Users Manual                 Page #76
  4958.     -----------------------------------------------------------------
  4959.     
  4960.        Loop X
  4961.           Writeln X[LoopIndex,1] '=' X[LoopIndex,2]
  4962.        EndLoop
  4963.     
  4964.     See Also: CancelListEntry MakeListEntry
  4965.     
  4966.     Category: Novell MSNet Vines
  4967.     
  4968.     
  4969.      BadDate : Boolean
  4970.     
  4971.     Set to true if you try to convert a string to a date and the date is
  4972.     invalid.
  4973.     
  4974.      Example:
  4975.        TimeOf('02-30-92')   ;Sets BadDate to True
  4976.     
  4977.     See Also: TimeOf
  4978.     
  4979.     Category: Time
  4980.     
  4981.     
  4982.      Bat (String)
  4983.     
  4984.     Bat is used to write a line to the batch file the same way that lines
  4985.     under OnKey commands do. All the same rules apply. The batch file is
  4986.     created and executed when the menu exits. Thus if Bat commands are
  4987.     intermixed with other MarxMenu commands the other MarxMenu command are
  4988.     executed first. The Bat command actually only puts the command in a
  4989.     buffer for later execution.
  4990.     
  4991.     Bat statements give you more control over what MarxMenu executes and
  4992.     allow you to include the contents of MarxMenu variables in your batch
  4993.     files or use complex formulas to create batch file lines.
  4994.     
  4995.     When using Bat under an OnKey statement, be sure to use the vertical bar
  4996.     in front of it. Bat gives you more control over what is sent to the
  4997.     batch file that MARX.BAT executes.
  4998.     
  4999.      Example:
  5000.        OnKey 'D'
  5001.          CLS
  5002.          |BAT "DIR " HomeDirectory '\' UserName
  5003.          PAUSE
  5004.     
  5005.     See Also: OnKey
  5006.     
  5007.     Category: Execution
  5008.     
  5009.  
  5010.     Computer Tyme * MarxMenu * Users Manual                 Page #77
  5011.     -----------------------------------------------------------------
  5012.     
  5013.      BatFileName : String
  5014.     
  5015.     Returns the name of the batch file that MarxMenu would create if
  5016.     MarxMenu were to create a batch file automatically.
  5017.     
  5018.     Category: String
  5019.     
  5020.     
  5021.      BigShadow
  5022.     
  5023.     Selects big shadow type. This is the default shadow.
  5024.     
  5025.     See Also: SmallShadow ShadowPosition ShadowColor
  5026.     
  5027.     Category: Display
  5028.     
  5029.     
  5030.      BinString (Number, Length) : String
  5031.     
  5032.     BinString converts a number into a base 2 binary string. If Length > 0
  5033.     then the number will have enough leading zeros to make it Length long.
  5034.     If Length = 0 then leading zeros are removed. Length must be 32 or less.
  5035.     
  5036.      Example:
  5037.        Writeln BinString(45,8)    ;returns 00101101
  5038.        Writeln BinString(45,0)    ;returns 101101
  5039.     
  5040.     See Also: HexString
  5041.     
  5042.     Category: String
  5043.     
  5044.     
  5045.      BiosDate : String
  5046.     
  5047.     Returns the date of the rom Bios.
  5048.     
  5049.     Category: System
  5050.     
  5051.     
  5052.      Blanked : Boolean
  5053.     
  5054.     Returns true if the screen blanker has kicked it. This lets you alter
  5055.     your idle program based on whether the screen blanker is active.
  5056.     
  5057.     See Also: IdleProgram
  5058.     
  5059.     Category: Display
  5060.     
  5061.  
  5062.     Computer Tyme * MarxMenu * Users Manual                 Page #78
  5063.     -----------------------------------------------------------------
  5064.     
  5065.      BlankMessage (String)
  5066.     
  5067.     When the screen blanks out, this one line message is displayed. If
  5068.     BlankMessage is not set, the date and time will be displayed.
  5069.     
  5070.      Example:
  5071.        BlankMessage = 'Out to Lunch!'
  5072.     
  5073.     See Also: ConsolePos
  5074.     
  5075.     Category: String
  5076.     
  5077.     
  5078.      BlankScreenProgram : Procedure
  5079.     
  5080.     This allows you to specify a custom procedure to have executed in place
  5081.     of the MarxMenu internal screen blanker. It also overrides the
  5082.     IdleProgram so if you are running something in your idle program that
  5083.     you want to continue to run when the screen goes blank, call your idle
  5084.     procedure from the screen blanker procedure.
  5085.     
  5086.     If you exit your screen blanker and MarxMenu thinks the screen should
  5087.     still be blank it will call it again. You can set UnBlank to True in
  5088.     your screen blanking program to override this and unblank the screen.
  5089.     
  5090.     When MarxMenu determines it's time to activate the screen blanker, it
  5091.     first blanks the screen then calls the BlankScreenProgram. When MarxMenu
  5092.     decides it's ready to unblank the screen it sets UnBlank to true.  When
  5093.     your BlankScreenProgram procedure is finished, MarxMenu will restore
  5094.     your screen to it's original condition upon exit.
  5095.     
  5096.     Commands like UseNovPassword, LockWord, and BlankTime will work with
  5097.     your screen blanker.
  5098.     
  5099.     To set up a blank screen program:
  5100.     
  5101.     BlankScreenProgram = Loc Procedure
  5102.     
  5103.      Example:
  5104.        BlankScreenProgram = Loc RunWorm
  5105.     
  5106.     To switch back to normal screen blanking run:
  5107.     
  5108.      Dispose(ScreenBlankProgram)
  5109.     
  5110.     For an example of a blank screen look at WORM.INC.
  5111.     
  5112.     The BlankScreenProgram can be used to run an external program to blank
  5113.     the screen.  So if you have some slick fractal program that you like
  5114.     MarxMenu will run it.  Here's how you would set it up.
  5115.     
  5116.  
  5117.     Computer Tyme * MarxMenu * Users Manual                 Page #79
  5118.     -----------------------------------------------------------------
  5119.     
  5120.      BlankScreenProgram = Loc BlankProg
  5121.     
  5122.      Procedure BlankProg
  5123.         Execute 'FRACTAL.EXE'
  5124.         UnBlank = True
  5125.      EndProc
  5126.     
  5127.     See Also: IdleProgram UnBlank
  5128.     
  5129.     Category: Display
  5130.     
  5131.     
  5132.      BlankTime (Minutes)
  5133.     
  5134.     Sets the number of minutes before the screen blanks out to prevent
  5135.     screen burn. Since this is not a resident program, screen blanking is
  5136.     only active while the menu system is active. Setting BlankTime to 0
  5137.     prevents screen blanking.
  5138.     
  5139.      Example:
  5140.        BlankTime = 10  ;set to 10 minutes
  5141.        BlankTime = 0   ;disables screen blanking
  5142.        Writeln BlankTime " Minutes of inactivity will cause screen blanking."
  5143.     
  5144.     Category: Display
  5145.     
  5146.     
  5147.      Blink : Boolean
  5148.     
  5149.     Blink is a boolean variable that when set to true allows you to specify
  5150.     colors that will blink. To make a color that blinks, set the background
  5151.     color to a bright color. A bright color is a color from 8 to 15.
  5152.     
  5153.     Normally, when Blink is off, MarxMenu strips the high bit of the colors.
  5154.     When Blink is on, high bit stripping is disabled.
  5155.     
  5156.      Example:
  5157.        Blink
  5158.        TextColor Green LRed
  5159.     
  5160.     Because the background color is light red, the text will blink.
  5161.     
  5162.     Warning: Blinking characters can cause headaches and eye strain. I
  5163.     resisted adding this feature for a long time because I personally hate
  5164.     excessive blinking characters on the screen. I now recognize that
  5165.     blinking can be very effective when used correctly. Please use blinking
  5166.     sparingly.
  5167.     
  5168.     Category: Color
  5169.     
  5170.  
  5171.     Computer Tyme * MarxMenu * Users Manual                 Page #80
  5172.     -----------------------------------------------------------------
  5173.     
  5174.      BlockBox
  5175.     
  5176.     Selects menu borders to have a block type edge.
  5177.     
  5178.     See Also: SingleLineBox DoubleLineBox CustomBox NoBoxBorder
  5179.     
  5180.      Example:
  5181.        BoxBordercolor yellow black
  5182.        BoxInsideColor White Black
  5183.        BlockBox                      ;<- Set Border Type to Block Style
  5184.        DrawBox 10 10 60 10
  5185.     
  5186.     Category: Display
  5187.     
  5188.     
  5189.      BootDrive : String
  5190.     
  5191.     Returns the drive letter of the boot drive. This command only works with
  5192.     DOS 4+, on all other versions of DOS it returns a null string. On
  5193.     diskless workstations the BootDrive will be A.
  5194.     
  5195.     Category: File
  5196.     
  5197.     
  5198.      BoxBorderColor (Foreground,Background)
  5199.     
  5200.     Sets colors for box border.
  5201.     
  5202.      Example:
  5203.        BoxBordercolor LRed black     ;<- Set Border Colors to LRed/Black
  5204.        BoxInsideColor White Black
  5205.        BlockBox
  5206.        DrawBox 10 10 60 10
  5207.     
  5208.     Category: Color
  5209.     
  5210.     
  5211.      BoxHeader (String)
  5212.     
  5213.     There are three possible box header strings.  This command sets the
  5214.     center header message for the next box displayed. This command must be
  5215.     used before the DrawBox command.
  5216.     
  5217.      Example:
  5218.        BoxHeader ' Center BoxHeader String ' ;<- Sets the Box Header String
  5219.        BoxBordercolor LRed Black
  5220.        BoxInsideColor White Black
  5221.        BlockBox
  5222.        DrawBox 5,6,70,9
  5223.     
  5224.     See Also: BoxHeaderLeft BoxHeaderRight
  5225.     See Also: BoxFooter BoxFooterLeft BoxFooterRight
  5226.     
  5227.  
  5228.     Computer Tyme * MarxMenu * Users Manual                 Page #81
  5229.     -----------------------------------------------------------------
  5230.     
  5231.     Category: Display
  5232.     
  5233.     
  5234.      BoxHeaderColor (Foreground,Background)
  5235.     
  5236.     There are three possible box header strings. This command sets colors
  5237.     for all the box headers and box footers strings.
  5238.     
  5239.      Example:
  5240.        BoxHeader ' Center Box Header String '
  5241.        BoxFooter ' Box Footer String '
  5242.        BoxBordercolor LRed Black
  5243.        BoxInsideColor White Black
  5244.        BoxHeaderColor Yellow Black       ;<-- Set Box Header/Footer Colors
  5245.        DrawBox 5,6,70,9
  5246.     
  5247.     Category: Color
  5248.     
  5249.     
  5250.      BoxHeaderLeft (String)
  5251.     
  5252.     There are three possible box header strings. This command sets the
  5253.     left header message for the next box displayed. This command must be
  5254.     used before the DrawBox command.
  5255.     
  5256.      Example:
  5257.        BoxHeaderLeft ' Left Header String ' ;<- Set Left Header String
  5258.        BoxBordercolor LRed Black
  5259.        BoxInsideColor White Black
  5260.        BoxHeaderColor Yellow Black
  5261.        DrawBox 5,6,70,9
  5262.     
  5263.     See Also: BoxHeader BoxHeaderRight
  5264.     See Also: BoxFooter BoxFooterLeft BoxFooterRight
  5265.     
  5266.     Category: Display
  5267.     
  5268.     
  5269.      BoxHeaderRight (String)
  5270.     
  5271.     There are three possible box header strings. This command sets the
  5272.     right header message for the next box displayed. This command must be
  5273.     used before the DrawBox command.
  5274.     
  5275.      Example:
  5276.        BoxHeaderRight 'Right Header String ';<- Set Right Header String
  5277.        BoxBordercolor LRed Black
  5278.        BoxInsideColor White Black
  5279.        BoxHeaderColor Yellow Black
  5280.        DrawBox 5,6,70,9
  5281.     
  5282.  
  5283.     Computer Tyme * MarxMenu * Users Manual                 Page #82
  5284.     -----------------------------------------------------------------
  5285.     
  5286.     See Also: BoxHeader BoxHeaderLeft
  5287.     See Also: BoxFooter BoxFooterLeft BoxFooterRight
  5288.     
  5289.     Category: Display
  5290.     
  5291.     
  5292.      BoxFooter (String)
  5293.     
  5294.     There are three possible box footer strings. This command sets the
  5295.     center footer message for the next box displayed. This command must be
  5296.     used before the DrawBox command.
  5297.     
  5298.      Example:
  5299.        BoxHeader ' Center Box Header String '
  5300.        BoxFooter ' Box Footer String '   ;<-- Set Center Footer String
  5301.        BoxBordercolor LRed Black
  5302.        BoxInsideColor White Black
  5303.        BoxHeaderColor Ye9llow Black
  5304.        DrawBox 5,6,70,9
  5305.     
  5306.     See Also: BoxHeader BoxHeaderLeft BoxHeaderRight
  5307.     See Also: BoxFooterLeft BoxFooterRight
  5308.     
  5309.     Category: Display
  5310.     
  5311.     
  5312.      BoxFooterLeft (String)
  5313.     
  5314.     There are three possible box footer strings. This command sets the
  5315.     Left Footer message for the next box displayed. This command must be
  5316.     used before the DrawBox command.
  5317.     
  5318.      Example:
  5319.        BoxFooter ' Center Footer String '
  5320.        BoxFooterLeft ' Left Footer String '   ;<-- Set Left Footer String
  5321.        BoxFooterRight ' Right Footer String '
  5322.        BoxBordercolor LRed Black
  5323.        BoxInsideColor White Black
  5324.        BoxHeaderColor Yellow Black
  5325.        DrawBox 5,6,70,9
  5326.     
  5327.     See Also: BoxHeader BoxHeaderLeft BoxHeaderRight
  5328.     See Also: BoxFooter BoxFooterRight
  5329.     
  5330.     Category: Display
  5331.     
  5332.  
  5333.     Computer Tyme * MarxMenu * Users Manual                 Page #83
  5334.     -----------------------------------------------------------------
  5335.     
  5336.      BoxFooterRight (String)
  5337.     
  5338.     There are three possible box footer strings. This command sets the
  5339.     Right Footer message for the next box displayed. This command must be
  5340.     used before the DrawBox command.
  5341.     
  5342.      Example:
  5343.        BoxFooter ' Center Footer String '
  5344.        BoxFooterLeft ' Left Footer String '
  5345.        BoxFooterRight ' Right Footer String ' ;<-- Set Right Footer String
  5346.        BoxHeaderColor Yellow Black
  5347.        BoxBordercolor LRed Black
  5348.        BoxInsideColor White Black
  5349.        DrawBox 5,6,70,9
  5350.     
  5351.     See Also: BoxHeader BoxHeaderLeft BoxHeaderRight
  5352.     See Also: BoxFooter BoxFooterLeft
  5353.     
  5354.     Category: Display
  5355.     
  5356.     
  5357.      BoxInsideColor (Foreground,Background)
  5358.     
  5359.     This command sets the colors for the interior of a box.
  5360.     
  5361.      Example:
  5362.        BoxBordercolor LRed Black
  5363.        BoxInsideColor White Black  ;<- Set Inside Colors to White on Black
  5364.        DrawBox 5,6,70,9
  5365.     
  5366.     Category: Color
  5367.     
  5368.     
  5369.      Break (On/Off)
  5370.     
  5371.     Turns DOS break checking On and Off the same way that it does from
  5372.     batch files.
  5373.     
  5374.     Category: System
  5375.     
  5376.     
  5377.      BrightBackground (On/Off)
  5378.     
  5379.     This command switches between bright background modes and blink modes.
  5380.     This doubles the number of colors that MarxMenu can produce.
  5381.     
  5382.     This command affects the video controller directly. Thus, it may not
  5383.     work on all computers especially if you are running something weird.
  5384.     
  5385.     Once this is set in MarxMenu it stays set. So if you run another program
  5386.     that has blink in it, it will use 16 background colors instead. The
  5387.     solution is to set BrightBackground Off right before you run a program
  5388.     that requires blinking.
  5389.     
  5390.  
  5391.     Computer Tyme * MarxMenu * Users Manual                 Page #84
  5392.     -----------------------------------------------------------------
  5393.     
  5394.      Example:
  5395.        OnKey 'X'
  5396.          |BrightBackground Off
  5397.          PROCOMM
  5398.     
  5399.     Warning! This program uses a trick that may not be compatible with some
  5400.     TSR programs. If you can get away with it, fine. But, if you have
  5401.     problems where TSR's cause your screen to blink, then don't use this
  5402.     command.
  5403.     
  5404.     Category: Video
  5405.     
  5406.     
  5407.      BtrvAbortTransaction
  5408.     
  5409.     BtrvAbortTransaction is used to abort all changes to the file that have
  5410.     occurred since the BtrvBeginTransaction was executed.
  5411.     
  5412.     See Also: BtrvBeginTransaction BtrvEndTransaction
  5413.     
  5414.     Category: Btrieve
  5415.     
  5416.     
  5417.      BtrvBeginTransaction
  5418.     
  5419.     Betrieve supports a concept called transaction tracking. With
  5420.     transaction tracking you can use the BtrvBeginTransaction command to set
  5421.     a file condition flag marking the start of a file process. Should the
  5422.     file process be interrupted before the end of the process the files will
  5423.     be restored to the original condition they were in prior to the
  5424.     BtrvBeginTransaction.
  5425.     
  5426.      Result Codes:
  5427.        37 - Transaction is Active
  5428.     
  5429.     See Also: BtrvAbortTransaction BtrvEndTransaction
  5430.     
  5431.     Category: Btrieve
  5432.     
  5433.     
  5434.      BtrvClearOwner (Handle)
  5435.     
  5436.     BtrvClearOwner clears the owner and allows normal access to the file.
  5437.     
  5438.      Example:
  5439.        BtrvClearOwner (Handle)
  5440.     
  5441.     See Also: BtrvSetOwner
  5442.     
  5443.     Category: Btrieve
  5444.     
  5445.  
  5446.     Computer Tyme * MarxMenu * Users Manual                 Page #85
  5447.     -----------------------------------------------------------------
  5448.     
  5449.      BtrvClose (Handle)
  5450.     
  5451.     BtrvClose closes the file. The parameter `Handle' is the file handle
  5452.     returned from BtrvOpen.
  5453.     
  5454.      Example:
  5455.        BtrvClose (Handle)
  5456.     
  5457.     See Also: BtrvOpen
  5458.     
  5459.     Category: Btrieve
  5460.     
  5461.     
  5462.      BtrvCreate (FileName,Fields)
  5463.     
  5464.     BtrvCreate is the most complicated Btrieve call. It defines the creation
  5465.     of the Btrieve database. The fields parameter is a two dimensional
  5466.     MarxMenu array that describes the fields in the file. It is designed to
  5467.     support either standard Btrieve fixed-length fields or MarxMenu key
  5468.     fields. Using MarxMenu fields is the easiest because you only have to
  5469.     define the key fields.  Non-key fields do not have to be predefined.
  5470.     
  5471.     The easiest way to define these fields is to create a comma delimited
  5472.     text file and use ReadAscTextFile('FIELDS.TXT',Fields). This will create
  5473.     the array needed by BtrvCreate. The text file might look as follows:
  5474.     
  5475.        Name,String,35,Key,DUP,MOD,UPPER,DEC
  5476.        CustomerNumber,Auto,Key
  5477.        From,String,35
  5478.        Password,String,15
  5479.        Access,Num
  5480.        Flags,String,10
  5481.        FirstDate,Date
  5482.        LastDate,Date
  5483.        Calls,Num
  5484.        CallTime,Time
  5485.        Phone,String,15
  5486.     
  5487.      Example:
  5488.        Var Fields, FieldHandle
  5489.        ReadAscTextFile('FIELDS.TXT',Fields)
  5490.        BtrvCreate('BBSUSER.BTD',Fields)
  5491.        FileHandle = BtrvOpen('BBSUSER.BTD',Fields)
  5492.     
  5493.     The above example creates a conventional fixed-length database with one
  5494.     key field, the "name" field. Each line in the definition file defines a
  5495.     new field. Each line has at least two parameters. The first parameter is
  5496.     the field name. It is followed by the field type. There are five legal
  5497.     field types.  They are:
  5498.     
  5499.  
  5500.     Computer Tyme * MarxMenu * Users Manual                 Page #86
  5501.     -----------------------------------------------------------------
  5502.     
  5503.       String - Contains alphanumeric strings. String fields have a required
  5504.                third parameter, the maximum length of the string. In the
  5505.                above example the "Name" and "From" fields both have max
  5506.                lengths of 35 characters.
  5507.     
  5508.       Num    - Integer numeric fields. This field type supports storing
  5509.                integer numbers.
  5510.     
  5511.       Date   - Dates fields. The DOS country code is automatically supported
  5512.                to establish date format. If not specified, the default
  5513.                format is "MM/DD/YY".
  5514.     
  5515.       Time   - Time fields. This command also reads the DOS country code to
  5516.                establish the proper format.  Otherwise default is "HH:MM:SS".
  5517.     
  5518.       Auto   - Auto increment field. This field is a numeric field that is
  5519.                filled in by Btrieve. If you pass a zero value, Btrieve will
  5520.                fill it in automatically with sequential unique numbers. The
  5521.                first record being one, the second record being two, etc. If
  5522.                records are deleted the numbers are not reused. If you pass a
  5523.                non-zero value that does not match any other record, Btrieve
  5524.                will accept that value. This feature can be used to provide
  5525.                unique record numbers.
  5526.     
  5527.     USING KEY FIELDS
  5528.     
  5529.     Key fields are fields that are have internal lookup indexs automatically
  5530.     defined and maintained by the Btrieve system. If you want to use the
  5531.     indexed lookup `BtrvGet_____' series of commands then the field you
  5532.     reference must be a key field. You define a key field by adding the
  5533.     parameter "KEY" as the third parameter on the field definition line.
  5534.     When specifying a field as a key field you have four optional
  5535.     configuration parameters as seen in the previous example. They are:
  5536.     
  5537.       DUP  - {Duplicates}  This permits the field to have duplicate values
  5538.              in multiple records. If this parameter is not specified then no
  5539.              two records may have the same value in the affected field. In
  5540.              reality, you will almost always specify this parameter when
  5541.              defining a key field.
  5542.     
  5543.       MOD  - {Modifiable}  This allows existing existing field records to be
  5544.              modified. If this parameter is not specified then once a record
  5545.              is written, the affected field is set in stone and changes are
  5546.              not permitted.
  5547.     
  5548.       UPPER- {UpperCase Only}  Used in cunjunction with string fields only,
  5549.              this will force all text information to be sorted as UPPERCASE.
  5550.              This feature requires Btrieve 6.0 or later.
  5551.     
  5552.  
  5553.     Computer Tyme * MarxMenu * Users Manual                 Page #87
  5554.     -----------------------------------------------------------------
  5555.     
  5556.       DEC - {Descending Order} This caused the key stored in the affected
  5557.             field to be maintained in reverse order.
  5558.     
  5559.     USING MARXMENU STYLE DATABASE
  5560.     
  5561.     If you wanted to use a MarxMenu-style database then only the first two
  5562.     lines of the above example need be in the file. This would create a file
  5563.     with two fixed-length key fields and put the rest of the fields in the
  5564.     variable-length section. Using the MarxMenu style you can pass anything
  5565.     you want for the rest of the fields.
  5566.     
  5567.        Name,String,35,Key,DUP,MOD,UPPER,DEC
  5568.        CustomerNumber,Auto,Key
  5569.     
  5570.                    --------------------------------------
  5571.                    |Name|CustomerNumber|All Other Fields|
  5572.                    --------------------------------------
  5573.                     ^    ^              ^
  5574.                     |    |              |
  5575.      Fixed Length --+----+              +--- Variable Length
  5576.     
  5577.     In a MarxMenu-style database, you pass data to and from the file using
  5578.     MarxMenu-style array variables. The first fields of the array must match
  5579.     the key fields. But the rest of the fields can be anything you want.
  5580.     They can be multidimensional arrays. The fields do not have to be the
  5581.     same from one record to the next. Record number one can have five
  5582.     fields, where record number two can have twenty. After the key fields
  5583.     you can do anything you want.
  5584.     
  5585.      Result Codes:
  5586.         18 - Disk Full
  5587.     
  5588.     Category: Btrieve
  5589.     
  5590.     
  5591.      BtrvDelete (Handle)
  5592.     
  5593.     BtrvDelete deletes a record from a data file at the location of the last
  5594.     data read from the file.
  5595.     
  5596.      Example:
  5597.        BtrvGetEqual(DataVar,'MARC PERKEL',1,Handle)
  5598.        BtrvDelete(Handle)
  5599.     
  5600.     See Also: BtrvInsert
  5601.     
  5602.     Category: Btrieve
  5603.     
  5604.  
  5605.     Computer Tyme * MarxMenu * Users Manual                 Page #88
  5606.     -----------------------------------------------------------------
  5607.     
  5608.      BtrvEndTransaction
  5609.     
  5610.     BtrvEndTransaction is used at the end of a transaction tracking process.
  5611.     This command updates the files with all the data to be written. Refer to
  5612.     the BtrvBeginTransaction command for additional information.
  5613.     
  5614.     See Also: BtrvAbortTransaction BtrvBeginTransaction
  5615.     
  5616.     Category: Btrieve
  5617.     
  5618.     
  5619.      BtrvGetEqual (DataVar,Value,Key,Handle)
  5620.     
  5621.     BtrvGetEqual goes to the previous record of the file based on the key
  5622.     number that you pass and reads the record matching Value into DataVar.
  5623.     The type of value passed has to match the type of data for which the key
  5624.     is defined. If the key is a string then Value is a string. If BtrvResult
  5625.     is zero, the data was found. If BtrvGetNext is called after this, the
  5626.     next sequential record based on the key is read.
  5627.     
  5628.      Example:
  5629.        BtrvGetEqual(DataVar,'MARC PERKEL',1,Handle)
  5630.     
  5631.      Result Codes:
  5632.        4 - Key Value not Found
  5633.        6 - Invalid Key Number
  5634.     
  5635.     See Also: BtrvGetLess BtrvGetLessOrEqu BtrvGetGreater
  5636.     See Also: BtrvGetGreaterOrEqu
  5637.     
  5638.     Category: Btrieve
  5639.     
  5640.     
  5641.      BtrvGetFirst (DataVar,Key,Handle)
  5642.     
  5643.     BtrvGetFirst goes to the first record of the file based on the key
  5644.     number that you pass and reads the record into DataVar. This allows you
  5645.     to access that database in the sorted order of the key. DataVar is a
  5646.     MarxMenu variable and the data read creates an array of the fields
  5647.     stored on disk.
  5648.     
  5649.      Example:
  5650.        Var Fields, Handle, DataVar
  5651.        ReadAscTextFile('FIELDS.TXT',Fields)
  5652.        Handle = BtrvOpen('BBSUSER.BTD',Fields)
  5653.     
  5654.        BtrvGetFirst(DataVar,1,Handle)
  5655.        while BrtvResult = 0
  5656.           loop DataVar
  5657.              Write DataVar[LoopIndex] ' '
  5658.           endloop
  5659.           Writeln
  5660.           BtrvGetNext(DataVar,1,Handle)
  5661.        EndWhile
  5662.     
  5663.  
  5664.     Computer Tyme * MarxMenu * Users Manual                 Page #89
  5665.     -----------------------------------------------------------------
  5666.     
  5667.     This example dumps the contents of a file to the screen.
  5668.     
  5669.      Result Codes:
  5670.        6 - Invalid Key Number
  5671.     
  5672.     See Also: BtrvGetLast BtrvGetNext BtrvGetPrev
  5673.     
  5674.     Category: Btrieve
  5675.     
  5676.     
  5677.      BtrvGetGreater (DataVar,Value,Key,Handle)
  5678.     
  5679.     BtrvGetGreater goes to the next larger record of the file based on the
  5680.     key number that you pass and reads the record greater than Value into
  5681.     DataVar. The type of Value passed has to match the type of data for
  5682.     which the key is defined. If the key is a string then Value is a string.
  5683.     If BtrvResult is zero, the data was found. If BtrvGetPrev is called
  5684.     after this, the next sequential record based on the key is read.
  5685.     
  5686.      Example:
  5687.        BtrvGetLess(DataVar,'MARC PERKEL',1,Handle)
  5688.     
  5689.      Result Codes:
  5690.        6 - Invalid Key Number
  5691.     
  5692.     See Also: BtrvGetEqual BtrvGetLess BtrvGetLessOrEqu
  5693.     See Also: BtrvGetGreaterOrEqu
  5694.     
  5695.     Category: Btrieve
  5696.     
  5697.     
  5698.      BtrvGetGreaterOrEqu (DataVar,Value,Key,Handle)
  5699.     
  5700.     BtrvGetGreaterOrEqu goes to the next larger or equal record of the file
  5701.     based on the key number that you pass and reads the record greater than
  5702.     or equal to Value into DataVar. The type of Value passed has to match
  5703.     the type of data for which the key is defined. If the key is a string
  5704.     then Value is a string. If BtrvResult is zero, the data was found. If
  5705.     BtrvGetPrev is called after this, the next sequential record based on
  5706.     the key is read.
  5707.     
  5708.      Example:
  5709.        BtrvGetLessOrEqu(DataVar,'MARC PERKEL',1,Handle)
  5710.     
  5711.      Result Codes:
  5712.        6 - Invalid Key Number
  5713.     
  5714.     See Also: BtrvGetEqual BtrvGetLess BtrvGetLessOrEqu BtrvGetGreater
  5715.     
  5716.     Category: Btrieve
  5717.     
  5718.  
  5719.     Computer Tyme * MarxMenu * Users Manual                 Page #90
  5720.     -----------------------------------------------------------------
  5721.     
  5722.      BtrvGetLast (DataVar,Key,Handle)
  5723.     
  5724.     BtrvGetLast goes to the last record of the file based on the key number
  5725.     that you pass and reads the record into DataVar. This allows you to
  5726.     access that database in the sorted order of the key. DataVar is a
  5727.     MarxMenu variable and the data read creates an array of the fields
  5728.     stored on disk.
  5729.     
  5730.      Example:
  5731.        Var Fields, Handle, DataVar
  5732.        ReadAscTextFile('FIELDS.TXT',Fields)
  5733.        Handle = BtrvOpen('BBSUSER.BTD',Fields)
  5734.     
  5735.        BtrvGetLast(DataVar,1,Handle)
  5736.        while BrtvResult = 0
  5737.           loop DataVar
  5738.              Write DataVar[LoopIndex] ' '
  5739.           endloop
  5740.           Writeln
  5741.           BtrvGetPrev(DataVar,1,Handle)
  5742.        EndWhile
  5743.     
  5744.     This example dumps the contents of a file to the screen backwards.
  5745.     
  5746.      Result Codes:
  5747.        6 - Invalid Key Number
  5748.     
  5749.     See Also: BtrvGetFirst BtrvGetNext BtrvGetPrev
  5750.     
  5751.     Category: Btrieve
  5752.     
  5753.     
  5754.      BtrvGetLess (DataVar,Value,Key,Handle)
  5755.     
  5756.     BtrvGetLess goes to the next smaller record of the file based on the key
  5757.     number that you pass and reads the record less than Value into DataVar.
  5758.     The type of Value passed has to match the type of data for which the key
  5759.     is defined. If the key is a string then Value is a string. If BtrvResult
  5760.     is zero, the data was found. If BtrvGetPrev is called after this, the
  5761.     next sequential record based on the key is read.
  5762.     
  5763.      Example:
  5764.        BtrvGetLess(DataVar,'MARC PERKEL',1,Handle)
  5765.     
  5766.      Result Codes:
  5767.        6 - Invalid Key Number
  5768.     
  5769.     See Also: BtrvGetEqual BtrvGetLessOrEqu BtrvGetGreater
  5770.     See Also: BtrvGetGreaterOrEqu
  5771.     
  5772.  
  5773.     Computer Tyme * MarxMenu * Users Manual                 Page #91
  5774.     -----------------------------------------------------------------
  5775.     
  5776.     Category: Btrieve
  5777.     
  5778.     
  5779.      BtrvGetLessOrEqu (DataVar,Value,Key,Handle)
  5780.     
  5781.     BtrvGetLessOrEqu goes to the next smaller or equal record of the file
  5782.     based on the key number that you pass and reads the record less than or
  5783.     equal to Value into DataVar. The type of Value passed has to match the
  5784.     type of data for which the key is defined. If the key is a string then
  5785.     Value is a string. If BtrvResult is zero, the data was found. If
  5786.     BtrvGetPrev is called after this, the next sequential record based on
  5787.     the key is read.
  5788.     
  5789.      Example:
  5790.        BtrvGetLessOrEqu(DataVar,'MARC PERKEL',1,Handle)
  5791.     
  5792.      Result Codes:
  5793.        6 - Invalid Key Number
  5794.     
  5795.     See Also: BtrvGetEqual BtrvGetLess BtrvGetGreater BtrvGetGreaterOrEqu
  5796.     
  5797.     Category: Btrieve
  5798.     
  5799.     
  5800.      BtrvGetNext (DataVar,Key,Handle)
  5801.     
  5802.     BtrvGetNext goes to the next record of the file based on the key number
  5803.     that you pass and reads the record into DataVar. This allows you to
  5804.     access that database in the sorted order of the key. DataVar is a
  5805.     MarxMenu variable and the data read creates an array of the fields
  5806.     stored on disk.
  5807.     
  5808.      Result Codes:
  5809.        6 - Invalid Key Number
  5810.        7 - Different Key Number
  5811.        9 - End of File
  5812.     
  5813.     See Also: BtrvGetFirst BtrvGetLast BtrvGetPrev
  5814.     
  5815.     Category: Btrieve
  5816.     
  5817.     
  5818.      BtrvGetPrev (DataVar,Key,Handle)
  5819.     
  5820.     BtrvGetPrev goes to the previous record of the file based on the key
  5821.     number that you pass and reads the record into DataVar. This allows you
  5822.     to access that database in the sorted order of the key. DataVar is a
  5823.     MarxMenu variable and the data read creates an array of the fields
  5824.     stored on disk.
  5825.     
  5826.      Result Codes:
  5827.        6 - Invalid Key Number
  5828.        7 - Different Key Number
  5829.        9 - End of File
  5830.     
  5831.  
  5832.     Computer Tyme * MarxMenu * Users Manual                 Page #92
  5833.     -----------------------------------------------------------------
  5834.     
  5835.     See Also: BtrvGetFirst BtrvGetLast BtrvGetNext
  5836.     
  5837.     Category: Btrieve
  5838.     
  5839.     
  5840.      BtrvIndexes (Handle) : Number
  5841.     
  5842.     BtrvIndexes returns the number of key fields in a file. You must open
  5843.     the file and get a file handle first.
  5844.     
  5845.      Example:
  5846.        Writeln BtrvIndexes (Handle)
  5847.     
  5848.     Category: Btrieve
  5849.     
  5850.     
  5851.      BtrvInsert (DataVar,Handle)
  5852.     
  5853.     BtrvInsert adds a new record to the data file. The data is passed in the
  5854.     array DataVar. If key fields are used, or if you are using traditional
  5855.     style fixed-length fields, then the first elements of the array must
  5856.     match the data structure of the file you defined with BtrvCreate. All
  5857.     elements of the array after these fields are written to the
  5858.     variable-length part of the file. The variable-length part can contain
  5859.     MarxMenu multi-dimensional data structures.
  5860.     
  5861.      Example:
  5862.        BtrvInsert(DataVar,Handle)
  5863.     
  5864.      Result Codes:
  5865.         5 - Duplicate Key
  5866.        18 - Disk Full
  5867.     
  5868.     See Also: BtrvDelete
  5869.     
  5870.     Category: Btrieve
  5871.     
  5872.     
  5873.      BtrvOpen (FileName,Fields) : Handle
  5874.     
  5875.     BtrvOpen is used to open the file for access. Since Btrieve files do not
  5876.     store a list of fields you have to pass the same data structure you did
  5877.     when you created the file. If successful, BtrvOpen will return a file
  5878.     handle. This handle will be referenced by all other commands that access
  5879.     this file.
  5880.     
  5881.      Example:
  5882.        Var Fields, Handle
  5883.        ReadAscTextFile('FIELDS.TXT',Fields)
  5884.        Handle = BtrvOpen('BBSUSER.BTD',Fields)
  5885.        If BtrvResult<>0
  5886.             WriteLn "Btrieve Error: " BtrvResult " While Opening File."
  5887.        EndIf
  5888.     
  5889.  
  5890.     Computer Tyme * MarxMenu * Users Manual                 Page #93
  5891.     -----------------------------------------------------------------
  5892.     
  5893.      Result Codes:
  5894.        46 - Access Denied
  5895.        85 - File Locked
  5896.        86 - File Table Full
  5897.        87 - Handle Table Full
  5898.     
  5899.     See Also: BtrvClose BtrvCreate
  5900.     
  5901.     Category: Btrieve
  5902.     
  5903.     
  5904.      BtrvPageSize (Handle) : Number
  5905.     
  5906.     BtrvPageSize returns the page size of in a file. You must open the file
  5907.     and get a file handle first. The page size is the amount of disk space
  5908.     allocated when a file is extended.
  5909.     
  5910.      Example:
  5911.        Writeln BtrvPageSize (Handle)
  5912.     
  5913.     Category: Btrieve
  5914.     
  5915.     
  5916.      BtrvRecLen (Handle) : Number
  5917.     
  5918.     BtrvRecLen returns the size of the fixed length part of in a file. You
  5919.     must open the file and get a file handle first.
  5920.     
  5921.      Example:
  5922.        Writeln BtrvRecLen (Handle)
  5923.     
  5924.     Category: Btrieve
  5925.     
  5926.     
  5927.      BtrvRecords (Handle) : Number
  5928.     
  5929.     BtrvRecords returns the number of records in a file. You must open the
  5930.     file and get a file handle first.
  5931.     
  5932.      Example:
  5933.        Var Fields, Handle
  5934.        ReadAscTextFile('FIELDS.TXT',Fields)
  5935.        Handle = BtrvOpen('CLIENTS.BTR',Fields)
  5936.        Writeln BtrvRecords (Handle)           ;# of Records in CLIENTS.BTR
  5937.     
  5938.     Category: Btrieve
  5939.     
  5940.  
  5941.     Computer Tyme * MarxMenu * Users Manual                 Page #94
  5942.     -----------------------------------------------------------------
  5943.     
  5944.      BtrvReset
  5945.     
  5946.     BtrvReset is used to clear all transactions and close all files. It's a
  5947.     good idea to start your programs with this command to clear any locks
  5948.     that might be left out there from other programs that might have
  5949.     aborted.
  5950.     
  5951.      Example:
  5952.        var fields
  5953.     
  5954.        btrvreset                           ;Start with a clean slate!
  5955.     
  5956.        readasctextfile('db.txt',fields)    ;Get field Definitions
  5957.        btrvcreate('phone.mb',fields)       ;Create Btrieve File
  5958.        writeln btrvresult                  ;Check for ok
  5959.     
  5960.     Category: Btrieve
  5961.     
  5962.     
  5963.      BtrvResult : Number
  5964.     
  5965.     BtrvResult returns the result code from the last Btrieve call. A zero is
  5966.     considered a success.
  5967.     
  5968.      Example:
  5969.        Procedure BtrieveError
  5970.          If BtrvResult <> 0
  5971.            Writeln 'Btrieve Error #',BtrvResult
  5972.            Writeln 'Exiting Program...'
  5973.            ExitMenu
  5974.          EndIf
  5975.        EndProc
  5976.     
  5977.      Result Codes:
  5978.         4 - Key Value not Found
  5979.         5 - Duplicate Key Value
  5980.         6 - Invalid Key Number
  5981.         7 - Different Key Number
  5982.         9 - End of File
  5983.        10 - Modifiable Key Value Error
  5984.        11 - Invalid File Name
  5985.        12 - File not Found
  5986.        18 - Disk Full
  5987.        20 - Btrieve not Loaded
  5988.        28 - Record too Long
  5989.        29 - Key too Long
  5990.        30 - Not a Btrieve File
  5991.        41 - Operation not Allowed
  5992.        46 - File Access Denied
  5993.        78 - Deadlock Detected
  5994.        86 - File Table Full
  5995.        87 - Handle Table Full
  5996.        92 - Transaction Table Full
  5997.     
  5998.  
  5999.     Computer Tyme * MarxMenu * Users Manual                 Page #95
  6000.     -----------------------------------------------------------------
  6001.     
  6002.     For other codes use BtrvResultMessage to display the error.
  6003.     
  6004.     See Also: BtrvResultMessage
  6005.     
  6006.     Category: Btrieve
  6007.     
  6008.     
  6009.      BtrvResultMessage : String
  6010.     
  6011.     BtrvResultMessage automatically returns a string containing an error
  6012.     message based on the value BtrvResult.
  6013.     
  6014.      Example:
  6015.        Writeln BtrvResultMessage          ;write Btreive Error Message
  6016.     
  6017.     See Also: BtrvResult
  6018.     
  6019.     Category: Btrieve
  6020.     
  6021.     
  6022.      BtrvSetOwner (Owner,Mode,Handle)
  6023.     
  6024.     BtrvSetOwner is really a set password function. It restricts access to
  6025.     the file unless you pass the owners name by setting BtrvOwner. The mode
  6026.     controls access and data encryption as follows:
  6027.     
  6028.        0 : No Btreive access - File Not Encrypted
  6029.        1 : Read Only access  - File Not Encrypted
  6030.        2 : No Btreive access - File Encrypted
  6031.        3 : Read Only access  - File Encrypted
  6032.     
  6033.      Example:
  6034.        BtrvSetOwner('NERD',3,Handle)
  6035.     
  6036.      Result Codes:
  6037.        50 - Owner Already Set
  6038.     
  6039.     See Also: BtrvClearOwner
  6040.     
  6041.     Category: Btrieve
  6042.     
  6043.     
  6044.      BtrvStepFirst (DataVar,Handle)
  6045.     
  6046.     BtrvStepFirst goes to the first physical record of the file and reads
  6047.     the record into DataVar. DataVar is a MarxMenu variable and the data
  6048.     read creates an array of the fields stored on disk.
  6049.     
  6050.      Example:
  6051.        Var Fields, Handle, DataVar
  6052.        ReadAscTextFile('FIELDS.TXT',Fields)
  6053.        Handle = BtrvOpen('BBSUSER.BTD',Fields)
  6054.     
  6055.  
  6056.     Computer Tyme * MarxMenu * Users Manual                 Page #96
  6057.     -----------------------------------------------------------------
  6058.     
  6059.        BtrvStepFirst(DataVar,Handle)
  6060.        while BrtvResult = 0
  6061.           loop DataVar
  6062.              Write DataVar[LoopIndex] ' '
  6063.           endloop
  6064.           Writeln
  6065.           BtrvStepNext(DataVar,Handle)
  6066.        EndWhile
  6067.     
  6068.     This example dumps the contents of a file to the screen.
  6069.     
  6070.     See Also: BtrvStepLast BtrvStepNext BtrvStepPrev
  6071.     
  6072.     Category: Btrieve
  6073.     
  6074.     
  6075.      BtrvStepLast (DataVar,Handle)
  6076.     
  6077.     BtrvStepLast goes to the last physical record of the file and reads the
  6078.     record into DataVar. DataVar is a MarxMenu variable and the data read
  6079.     creates an array of the fields stored on disk.
  6080.     
  6081.      Example:
  6082.        Var Fields, Handle, DataVar
  6083.        ReadAscTextFile('FIELDS.TXT',Fields)
  6084.        Handle = BtrvOpen('BBSUSER.BTD',Fields)
  6085.     
  6086.        BtrvStepLast(DataVar,Handle)
  6087.        while BrtvResult = 0
  6088.           loop DataVar
  6089.              Write DataVar[LoopIndex] ' '
  6090.           endloop
  6091.           Writeln
  6092.           BtrvStepPrev(DataVar,Handle)
  6093.        EndWhile
  6094.     
  6095.     This example dumps the contents of a file to the screen backwards.
  6096.     
  6097.     See Also: BtrvStepFirst BtrvStepNext BtrvStepPrev
  6098.     
  6099.     Category: Btrieve
  6100.     
  6101.     
  6102.      BtrvStepNext (DataVar,Handle)
  6103.     
  6104.     BtrvStepNext goes to the next physical record of the file and reads the
  6105.     record into DataVar. DataVar is a MarxMenu variable and the data read
  6106.     creates an array of the fields stored on disk.  This is normally used to
  6107.     work through a file when the search field in not a key field.
  6108.     
  6109.  
  6110.     Computer Tyme * MarxMenu * Users Manual                 Page #97
  6111.     -----------------------------------------------------------------
  6112.     
  6113.      Example:
  6114.        var fields,temp,handle,vararray
  6115.        readasctextfile('data.txt',fields)
  6116.        handle=btrvopen('phone.mxb',fields)
  6117.        while btrvresult=0
  6118.           btrvstepnext(vararray,handle)       ;<- Step to next file record
  6119.           writeln vararray[1] " " vararray[2]
  6120.        endwhile
  6121.        btrvclose(handle)
  6122.     
  6123.      Result Codes:
  6124.         9 - End of File
  6125.     
  6126.     See Also: BtrvStepFirst BtrvStepLast BtrvStepPrev
  6127.     
  6128.     Category: Btrieve
  6129.     
  6130.     
  6131.      BtrvStepPrev (DataVar,Handle)
  6132.     
  6133.     BtrvStepPrev goes to the previous physical record of the file and reads
  6134.     the record into the variable DataVar. DataVar is a MarxMenu variable and
  6135.     the data read creates an array of the fields stored on disk.
  6136.     
  6137.      Result Codes:
  6138.         9 - End of File
  6139.     
  6140.     See Also: BtrvStepFirst BtrvStepLast BtrvStepNext
  6141.     
  6142.     Category: Btrieve
  6143.     
  6144.     
  6145.      BtrvStop
  6146.     
  6147.     BtrvStop is used to unload BTRIEVE.EXE or BREQUEST.EXE from memory. You
  6148.     can load the requestor before running MarxMenu as a database and unload
  6149.     the requestor when you are finished. This reclaims the memory the
  6150.     requestor was using.
  6151.     
  6152.     Category: Btrieve
  6153.     
  6154.     
  6155.      BtrvUnusedPages (Handle) : Number
  6156.     
  6157.     BtrvUnusedPages returns the number of unused pages in a file. You must
  6158.     open the file and get a file handle first. Unused pages are created when
  6159.     data is deleted from a file.
  6160.     
  6161.      Example:
  6162.        Writeln BtrvPageSize (Handle)
  6163.     
  6164.  
  6165.     Computer Tyme * MarxMenu * Users Manual                 Page #98
  6166.     -----------------------------------------------------------------
  6167.     
  6168.     Category: Btrieve
  6169.     
  6170.     
  6171.      BtrvUpdate (DataVar,Handle)
  6172.     
  6173.     BtrvUpdate changes a record in the data file at the last location
  6174.     accessed with any command that reads a record. The data is passed in the
  6175.     array DataVar. If key fields are used, or if you are using traditional
  6176.     style fixed-length fields, then the first elements of the array must
  6177.     match the data structure of the file you defined with BtrvCreate. All
  6178.     elements of the array after these fields are written to the
  6179.     variable-length part of the file. The variable length part can contain
  6180.     MarxMenu multi-dimensional data structures.
  6181.     
  6182.      Example:
  6183.        BtrvGetEqual(DataVar,'MARC PERKEL',1,Handle)
  6184.        if BtrvResult = 0
  6185.           DataVar[3] = 37
  6186.           BtrvUpdate(DataVar,Handle)
  6187.        endif
  6188.     
  6189.      Result Codes:
  6190.         5 - Duplicate Key
  6191.         7 - Different Key
  6192.        10 - Modifiable Key Value Error
  6193.        80 - Conflict
  6194.     
  6195.     Category: Btrieve
  6196.     
  6197.     
  6198.      BtrvVersion : Number
  6199.     
  6200.     BtrvVersion returns a number representing the version number of Btrieve
  6201.     that you are using. A zero indicates that Btrieve is not installed. If
  6202.     Btrieve is installed then it returns 100 times the version number plus
  6203.     the minor version number. Version 6.0 becomes 600. Version 5.10 becomes
  6204.     510.
  6205.     
  6206.      Example:
  6207.        if BtrieveVersion = 0
  6208.           Writeln "Sorry, but Btrieve must be loaded first!"
  6209.        else
  6210.           Writeln "You are running Btrieve Version #: " BtrvVersion
  6211.        endif
  6212.     
  6213.     Category: Btrieve
  6214.     
  6215.  
  6216.     Computer Tyme * MarxMenu * Users Manual                 Page #99
  6217.     -----------------------------------------------------------------
  6218.     
  6219.      BuildPath (Array)
  6220.     
  6221.     The command BuildPath will build a PATH environment variable based upon
  6222.     the contents of a specified Array variable. The first element in the
  6223.     array becomes the first search path.
  6224.     
  6225.      Example:
  6226.        Var PathList
  6227.        Pathlist[1] = 'F:\PUBLIC'
  6228.        Pathlist[2] = 'F:\DOS'
  6229.        Pathlist[3] = 'F:\UTIL'
  6230.        BuildPath (PathList)  ;sets PATH=F:\PUBLIC;F:\DOS;F:\UTIL
  6231.     
  6232.     See Also: SplitPath FixPath
  6233.     
  6234.     Category: String Array Environment
  6235.     
  6236.     
  6237.      CancelListEntry (Local Name)
  6238.     
  6239.     This will take an entry out of the network redirection list for either a
  6240.     print redirection or disk drive redirection.
  6241.     
  6242.      Example:
  6243.        CancelListEntry 'P:'    ;cancels network drive mapping
  6244.        CancelListEntry 'LPT1'  ;cancels printer redirection
  6245.     
  6246.     See Also: AssignList MakeListEntry
  6247.     
  6248.     Category: Novell MSNet Vines
  6249.     
  6250.     
  6251.      CapFirstChar (On/Off)
  6252.     
  6253.     When CapFirstChar is set to On the first character and all characters
  6254.     following a space are automatically capitalized during a Readln command.
  6255.     
  6256.     See Also: Readln
  6257.     
  6258.     Category: String
  6259.     
  6260.     
  6261.      CapsColor (Foreground,Background)
  6262.     
  6263.     Setting CapsColor allows capital letters and numbers to be a different
  6264.     color than the rest of the text. This is used with the UseArrows command
  6265.     to show which character is the one that selects the options in the
  6266.     window. CapsColor is reset after any TextColor command, so be sure to
  6267.     use CapsColor AFTER TextColor commands.
  6268.     
  6269.     For this option the numbers 0 - 9 and some punctuation characters are
  6270.     considered capitals.
  6271.     
  6272.  
  6273.     Computer Tyme * MarxMenu * Users Manual                 Page #100
  6274.     -----------------------------------------------------------------
  6275.     
  6276.      Example:
  6277.        CapsColor White Blue
  6278.     
  6279.     See Also: DrawBox
  6280.     
  6281.     Category: Color
  6282.     
  6283.     
  6284.      CapsLock : Boolean
  6285.     
  6286.     This variable can be used to read the status of the KeyBoard Caps Lock
  6287.     indicator and to set the current caps lock mode.
  6288.     
  6289.      Example:
  6290.        if CapsLock then Write 'CapsLock is On'
  6291.     
  6292.        CapsLock On  ;Turns CapsLock On
  6293.        CapsLock Off ;Turns CapsLock Off
  6294.     
  6295.        CapsLock ; (by itself) turns CapsLock On.
  6296.     
  6297.        if CapsLock
  6298.           ;do something
  6299.        endif
  6300.     
  6301.     See Also: ScrollLock NumLock
  6302.     
  6303.     Category: System
  6304.     
  6305.     
  6306.      Chain (MenuName)
  6307.     
  6308.     This command will load a new menu. Unlike Jump, MarxMenu stays in
  6309.     memory. The screen is not cleared. If the new menu has exactly the same
  6310.     global variables, the contents of all global variables is retained.
  6311.     Chain allows for a very quick transfer from one menu to another.
  6312.     
  6313.      Example:
  6314.        OnKey 'P'
  6315.          |Chain ('USER')  ;Chains to USER.MNU
  6316.     
  6317.     Category: Execution
  6318.     
  6319.     
  6320.      Char (Number) : String
  6321.     
  6322.     Converts a number into a one character string.
  6323.     
  6324.      Example:
  6325.        Write (Char(65)) ;This will display 'A'
  6326.     
  6327.  
  6328.     Computer Tyme * MarxMenu * Users Manual                 Page #101
  6329.     -----------------------------------------------------------------
  6330.     
  6331.     See Also: Ord
  6332.     
  6333.     Category: String
  6334.     
  6335.     
  6336.      ChDir (String)
  6337.     
  6338.     Changes directories. The variable FileResult can be tested to see if it
  6339.     was successful. ChDir can also be used to change drives.
  6340.     
  6341.      Example:
  6342.        ChDir( 'C:\HOME\MARXMENU' )
  6343.        ChDir( 'B:' )                ; Will make drive B: the current drive
  6344.     
  6345.     Category: Directory
  6346.     
  6347.     
  6348.      CleanFileName (String) : String
  6349.     
  6350.     Returns the full path name or directory name of a string. It also
  6351.     removes occurrences of a '\\' in the string if they aren't at the
  6352.     beginning of the string.
  6353.     
  6354.      Thus the command:
  6355.         CleanFileName('a:\\main.mnu') returns 'A:\MAIN.MNU'.
  6356.     
  6357.     CleanFileName also removes extra ending '\' and capitalizes the path.
  6358.     
  6359.     See Also: TrueName
  6360.     
  6361.     Category: String
  6362.     
  6363.     
  6364.      ClearKbdBuffer
  6365.     
  6366.     ClearKbdBuffer clears the characters out of the keyboard buffer.
  6367.     
  6368.     Category: Keyboard
  6369.     
  6370.     
  6371.      ClearKeyEvents
  6372.     
  6373.     ClearKeyEvents wipes out all key events for the current window. Since
  6374.     child window inherit the key events of it's parent window, this command
  6375.     allows you to wipe out these events when you want to open a new window
  6376.     for another purpose where the existing key events wouldn't be
  6377.     appropiate. This command only affects the current window.
  6378.     
  6379.      Example:
  6380.        DrawBox 2 2 78 20
  6381.        ClearKeyEvents
  6382.        ViewTextFile 'HELP.TXT'
  6383.     
  6384.  
  6385.     Computer Tyme * MarxMenu * Users Manual                 Page #102
  6386.     -----------------------------------------------------------------
  6387.     
  6388.     See Also: KeyEvent
  6389.     
  6390.     Category: Event
  6391.     
  6392.     
  6393.      ClearLine (Char)
  6394.     
  6395.     Clears the current line in the current window. The optional parameter is
  6396.     for the decimal number of the IBM graphics character. If (Char) is
  6397.     present, the line will be filled with the character.
  6398.     
  6399.      Examples:
  6400.         ClearLine       ;Clears screen with blanks
  6401.         ClearLine 205   ;Clears screen with char 205
  6402.     
  6403.     Category: Display Ansi
  6404.     
  6405.     
  6406.      ClearScreen (Char)
  6407.     
  6408.     Clears the screen. The optional parameter is the decimal number
  6409.     equivalent for an IBM graphics character. If (Char) is present, the
  6410.     screen will be filled with (Char).
  6411.     
  6412.      Examples:
  6413.         ClearScreen       ;Clears screen with blanks
  6414.         ClearScreen 177   ;Clears screen with char 177
  6415.     
  6416.     Category: Display Ansi
  6417.     
  6418.     
  6419.      ClearScreenFirst (On/Off)
  6420.     
  6421.     Used in conjunction with Execute. If on, will clear the screen before
  6422.     running the program.
  6423.     
  6424.      Example:
  6425.        OnKey 'D'
  6426.          |ClearScreenFirst On
  6427.          |Execute 'C:\DM.COM'
  6428.     
  6429.     The default is ON.
  6430.     
  6431.     See Also: Execute
  6432.     
  6433.     Category: Execution
  6434.     
  6435.  
  6436.     Computer Tyme * MarxMenu * Users Manual                 Page #103
  6437.     -----------------------------------------------------------------
  6438.     
  6439.      ClearScreenOnExit (On/Off)
  6440.     
  6441.     Controls whether or not the screen is cleared on menu exit. Default on.
  6442.     
  6443.     See Also: Execute
  6444.     
  6445.     Category: Display
  6446.     
  6447.     
  6448.      ClockColor (Foreground,Background)
  6449.     
  6450.     Sets colors for the on screen clock.
  6451.     
  6452.      Example:
  6453.        ClockColor Yellow Brown
  6454.     
  6455.     Category: Color
  6456.     
  6457.     
  6458.      ClockMode
  6459.     
  6460.     ClockMode is a variable whose bits control the format of the on screen
  6461.     clock when it is used.
  6462.     
  6463.      ClockMode Bits:
  6464.      ---------------
  6465.      0 24 hour mode
  6466.      1 AmPm On
  6467.      2 Show Seconds
  6468.      3 UpperCase
  6469.      4 3 char month
  6470.      5 3 char Day of Week
  6471.      6 Show Day of Week
  6472.      7 Dash = 0 Slash = 1 MM-DD-YY or MM/DD/YY
  6473.      8 Long Date
  6474.     
  6475.      Bit 0 on sets hours display to 24 hour mode.
  6476.      Bit 1 turns on the Am/Pm display.
  6477.      Bit 2 on controls if time is shown as HH:MM:SS or just HH:MM.
  6478.      Bit 3 shows date in only upper case.
  6479.      Bit 4 on shows month in 3 characters.
  6480.      Bit 5 shows Day of week as 3 characters.
  6481.      Bit 6 controls if Day of week is displayed.
  6482.      Bit 7 controls if date is shown as MM-DD-YY or MM/DD/YY.
  6483.      Bit 8 shows date in text. (October 3, 1990).
  6484.     
  6485.     The default ClockMode is 326.
  6486.     
  6487.      Example:
  6488.        ClockMode 120
  6489.        ClockColor White Red
  6490.        ClockPos 1,1
  6491.     
  6492.  
  6493.     Computer Tyme * MarxMenu * Users Manual                 Page #104
  6494.     -----------------------------------------------------------------
  6495.     
  6496.     Category: Display
  6497.     
  6498.     
  6499.      ClockPos (Column,Row)
  6500.     
  6501.     Puts a clock on the screen at location (column,row). The command
  6502.     ClockPos 0 0 turns the clock off.
  6503.     
  6504.      Example:
  6505.        ClockPos 7 2
  6506.     
  6507.     Category: Display
  6508.     
  6509.     
  6510.      ClosePrinter
  6511.     
  6512.     In MarxMenu the printer is just another text file. Closing the printer
  6513.     is not required for ordinary printing. If you are changing printers you
  6514.     need to run ClosePrinter before changing the printer name. The printer
  6515.     is automatically opened by MarxMenu anytime you print anything.
  6516.     
  6517.     If you are running Windows or DesqView, closing the printer allows other
  6518.     programs to access the printer. So if you are running under any
  6519.     multitasking shell, be sure to close the printer when you are done with
  6520.     it.
  6521.     
  6522.     If you are using a network like Novell, ClosePrinter will end the print
  6523.     job and send it to the print queue. This avoids the need to wait for
  6524.     print capture timeouts to take effect.
  6525.     
  6526.     Closing the printer is good programming practice and will help you stay
  6527.     out of trouble. It's like what your mother taught you. "When you're done
  6528.     with something, put it away."
  6529.     
  6530.     See Also: OpenPrinter PrinterName
  6531.     
  6532.     Category: Printer
  6533.     
  6534.     
  6535.      ClusterSize (Drive) : Number
  6536.     
  6537.     Returns cluster size in bytes.
  6538.     
  6539.      Example:
  6540.        Writeln (ClusterSize 'C')
  6541.     
  6542.     ClusterSize only looks at the first character of the string for the
  6543.     drive letter.
  6544.     
  6545.      Example:
  6546.        ClusterSize (Path)  ;returns clustersize of current drive.
  6547.     
  6548.  
  6549.     Computer Tyme * MarxMenu * Users Manual                 Page #105
  6550.     -----------------------------------------------------------------
  6551.     
  6552.     Category: System
  6553.     
  6554.     
  6555.      CmdLine : String
  6556.     
  6557.     A System string variable that returns the rest of the command line after
  6558.     the menu name. If you execute MARXMENU GOFILE *.BAT the CmdLine command
  6559.     would return "*.BAT".
  6560.     
  6561.      Example:
  6562.        writeln cmdline  ;returns the command line after the menu name.
  6563.     
  6564.     Category: String
  6565.     
  6566.     
  6567.      CMOS (Number) : Number
  6568.     
  6569.     CMOS allows reads from and write to the CMOS RAM on the clock chip.
  6570.     
  6571.      Example:
  6572.        Writeln CMOS(16)
  6573.        CMOS(16) = $42
  6574.     
  6575.     Category: System
  6576.     
  6577.     
  6578.      ColdBoot
  6579.     
  6580.     Causes a cold reboot of the computer. This differs from a warm boot in
  6581.     that it is a complete system reset that forces the computer to go
  6582.     through the (POST, Power On Self Test) process. A warm boot does not
  6583.     force a complete reset.
  6584.     
  6585.     See Also: Reboot
  6586.     
  6587.     Category: Execution
  6588.     
  6589.     
  6590.      ColorScreen : Boolean
  6591.     
  6592.     Returns true if screen is a color screen and in a color mode.  Note:
  6593.     Running MODE BW80 will cause ColorScreen to return false.
  6594.     
  6595.      Example:
  6596.        If ColorScreen
  6597.            ;Color
  6598.          TextColor( White, Blue )
  6599.        Else
  6600.            ;Monochrome
  6601.          TextColor( White, Black )
  6602.        EndIf
  6603.     
  6604.  
  6605.     Computer Tyme * MarxMenu * Users Manual                 Page #106
  6606.     -----------------------------------------------------------------
  6607.     
  6608.     Category: Video
  6609.     
  6610.     
  6611.      ComBaud : Number
  6612.     
  6613.     Reads or sets the baud rate of the serial port indicated by the ComPort
  6614.     command. Range from 110 to 115,000 baud.
  6615.     
  6616.      Example:
  6617.        ComBaud = 9600
  6618.        Writeln ComBaud
  6619.     
  6620.     See Also: ComDataBits ComStopBits ComParity
  6621.     
  6622.     Category: Modem
  6623.     
  6624.     
  6625.      ComBlockErrors : Number
  6626.     
  6627.     During an upload or download ComBlockErrors returns the number of
  6628.     errors that occurred during the current block.
  6629.     
  6630.     See Also: ComXmitStatusProgram
  6631.     
  6632.     Category: Modem
  6633.     
  6634.     
  6635.      ComBlockNumber : Number
  6636.     
  6637.     During an upload or download ComBlockNumber returns the current block
  6638.     number.
  6639.     
  6640.     See Also: ComXmitStatusProgram
  6641.     
  6642.     Category: Modem
  6643.     
  6644.     
  6645.      ComBlockSize : Number
  6646.     
  6647.     During an upload or download ComBlockSize returns the number of bytes in
  6648.     the block that's being transferred.
  6649.     
  6650.     See Also: ComXmitStatusProgram
  6651.     
  6652.     Category: Modem
  6653.     
  6654.     
  6655.      ComBreakReceived : Boolean
  6656.     
  6657.     Returns True if a break signal has been received at the serial port.
  6658.     
  6659.      Example:
  6660.         if ComBreakReceived then Writeln 'Break Received'
  6661.     
  6662.  
  6663.     Computer Tyme * MarxMenu * Users Manual                 Page #107
  6664.     -----------------------------------------------------------------
  6665.     
  6666.     See Also: ComSendBreak
  6667.     
  6668.     Category: Modem
  6669.     
  6670.     
  6671.      ComBytesRemaining : Number
  6672.     
  6673.     During an upload or download ComBytesRemaining returns the number of
  6674.     bytes that is yet to be transferred.
  6675.     
  6676.     See Also: ComXmitStatusProgram
  6677.     
  6678.     Category: Modem
  6679.     
  6680.     
  6681.      ComBytesTransferred : Number
  6682.     
  6683.     During an upload or download ComBytesTransferred returns the number of
  6684.     bytes that has been transferred.
  6685.     
  6686.     See Also: ComXmitStatusProgram
  6687.     
  6688.     Category: Modem
  6689.     
  6690.     
  6691.      ComCD : Boolean
  6692.     
  6693.     Returns the status of the carrier detect line on serial port indicated
  6694.     by the ComPort Command.
  6695.     
  6696.      Example:
  6697.        if ComCD=True then Writeln 'Carrier Detected'
  6698.        if ComCD then Writeln 'Carrier Detected'
  6699.     
  6700.     Category: Modem
  6701.     
  6702.     
  6703.      ComCDAbort : Boolean
  6704.     
  6705.     ComCDAbort is set to True if ComWatchCD is on and the carrier is lost.
  6706.     This is used as a signal to indicate that the modem has lost connection
  6707.     and the host program should reset and prepare for the next call.
  6708.     
  6709.     See Also: ComWatchCD
  6710.     
  6711.     Category: Modem
  6712.     
  6713.  
  6714.     Computer Tyme * MarxMenu * Users Manual                 Page #108
  6715.     -----------------------------------------------------------------
  6716.     
  6717.      ComCharReady : Boolean
  6718.     
  6719.     Tests to see if a character has been received in the input buffer.
  6720.     
  6721.      Example:
  6722.        if ComCharReady then Ch = ComReadChar
  6723.     
  6724.     See Also: ComReadChar
  6725.     
  6726.     Category: Modem
  6727.     
  6728.     
  6729.      ComDataBits : Number
  6730.     
  6731.     Reads or sets the number of data bits. Range 5 - 8 bits.
  6732.     
  6733.      Example:
  6734.        ComDataBits = 8
  6735.        Writeln ComDataBits
  6736.     
  6737.     See Also: ComBaud ComStopBits ComParity
  6738.     
  6739.     Category: Modem
  6740.     
  6741.     
  6742.      ComDone
  6743.     
  6744.     Uninitializes the port. Deallocates memory used by ComInitPort and
  6745.     restores interrupt vectors.
  6746.     
  6747.     See Also: ComInitPort
  6748.     
  6749.     Category: Modem
  6750.     
  6751.     
  6752.      ComDrainSendBuffer
  6753.     
  6754.     ComDrainSendBuffer waits until all the characters in the send buffer go
  6755.     to the modem. This allows the other end to get the last of the goodbye
  6756.     message without being cut off by a hangup. With buffered modems you
  6757.     should wait a few seconds after this command before hanging up the modem
  6758.     to ensure that all the data has been transferred.
  6759.     
  6760.     Category: Modem
  6761.     
  6762.     
  6763.      ComDTR (On/Off)
  6764.     
  6765.     Turns DTR (Data Terminal Ready) On or Off. Setting DTR to Off can be
  6766.     used to hang up a modem.
  6767.     
  6768.      Example:
  6769.        ComDTR Off
  6770.     
  6771.  
  6772.     Computer Tyme * MarxMenu * Users Manual                 Page #109
  6773.     -----------------------------------------------------------------
  6774.     
  6775.     Category: Modem
  6776.     
  6777.     
  6778.      ComEchoRecChar : Boolean
  6779.     
  6780.     When ComEchoRecChar is set to true then characters received are echoed
  6781.     back to the sender. This option is useful when writing a host
  6782.     communication program. The echoed character is intelligently processed.
  6783.     
  6784.     See Also: ComReadChar
  6785.     
  6786.     Category: Modem
  6787.     
  6788.     
  6789.      ComEchoSendChar : Boolean
  6790.     
  6791.     When ComEchoSendChar is set to true then characters sent are echoed
  6792.     to the local screen. This option is useful when writing a host
  6793.     communication program. The echoed character is intelligently processed.
  6794.     When set to true, the following commands will also be processed for
  6795.     correct com port output: TextColor, GotoXY, ClearScreen, ClearLine.
  6796.     
  6797.     See Also: ComReadChar ComEchoRecChar
  6798.     
  6799.     Category: Modem
  6800.     
  6801.     
  6802.      ComEmptyRecBuffer
  6803.     
  6804.     ComEmptyRecBuffer trashes the data in the receive buffer. This allows
  6805.     you to get rid of incoming trash data.
  6806.     
  6807.     See Also: ComEmptySendBuffer
  6808.     
  6809.     Category: Modem
  6810.     
  6811.     
  6812.      ComEmptySendBuffer
  6813.     
  6814.     ComEmptySendBuffer trashes all the data in the send buffer that hasn't
  6815.     been transferred. This allows you to create a hot key effect and makes
  6816.     host programs act more responsive.
  6817.     
  6818.     See Also: ComEmptyRecBuffer
  6819.     
  6820.     Category: Modem
  6821.     
  6822.  
  6823.     Computer Tyme * MarxMenu * Users Manual                 Page #110
  6824.     -----------------------------------------------------------------
  6825.     
  6826.      ComErrorLimit : Number
  6827.     
  6828.     ComErrorLimit is the maximum number of errors that a file transfer can
  6829.     have before an automatic transfer abort occurs. If set to 0 then it will
  6830.     keep trying forever. The default limit is 100.
  6831.     
  6832.     Category: Modem
  6833.     
  6834.     
  6835.      ComFileName : String
  6836.     
  6837.     During an upload or download ComFileName returns the name of the file
  6838.     being transferred.
  6839.     
  6840.     See Also: ComXmitStatusProgram
  6841.     
  6842.     Category: Modem
  6843.     
  6844.     
  6845.      ComFileSize : Number
  6846.     
  6847.     During an upload or download ComFileSize returns the size of the file
  6848.     being transferred.
  6849.     
  6850.     See Also: ComXmitStatusProgram
  6851.     
  6852.     Category: Modem
  6853.     
  6854.     
  6855.      ComInitPort (Baud,DataBits,Parity,StopBits)
  6856.     
  6857.     Initializes the ComPort. After selecting which com port you want to
  6858.     initialize with the ComPort command, this must be run before other com
  6859.     commands are executed.
  6860.     
  6861.      Example:
  6862.        ComPort = Com1
  6863.        ComInitPort(38400,8,'N',1)
  6864.     
  6865.     See Also: ComDone
  6866.     
  6867.     Category: Modem
  6868.     
  6869.     
  6870.      ComLastChar : String
  6871.     
  6872.     ComLastChar returns the last character that was received with
  6873.     ComReadChar.
  6874.     
  6875.     See Also: ComReadChar ComCharReady ComReadTimeout ComReadln
  6876.     
  6877.     Category: Modem
  6878.     
  6879.  
  6880.     Computer Tyme * MarxMenu * Users Manual                 Page #111
  6881.     -----------------------------------------------------------------
  6882.     
  6883.      ComLastLine : String
  6884.     
  6885.     ComLastLine returns the last line that was received that is not a blank
  6886.     line. BackSpace characters are handled correctly.
  6887.     
  6888.     Category: Modem
  6889.     
  6890.     
  6891.      ComNewLineProgram : Procedure
  6892.     
  6893.     ComNewLineProgram is a procedure variable that if set to point to a
  6894.     procedure is executed every time a new line is received at the modem.
  6895.     
  6896.      Example:
  6897.        ComNewLineProgram = Loc ExamineLastLine
  6898.     
  6899.        Procedure ExamineLastLine
  6900.        var St P
  6901.           P = pos('Time Sync:',ComLastLine)
  6902.           if P = 0 then Return
  6903.           St = mid(ComLastLine,P + 11,17)    ;read Date and Time
  6904.           NovServerTime = TimeOf(St)
  6905.        EndProc
  6906.     
  6907.     In this example, ExamineLastLine is executed once each new line and is
  6908.     scaned for the word "Time Sync:". If the word is found it sets the
  6909.     server time to the value following that word.
  6910.     
  6911.     Category: Modem
  6912.     
  6913.     
  6914.      ComParity : String
  6915.     
  6916.     Reads or sets the parity.
  6917.     
  6918.      N - None
  6919.      E - Even
  6920.      O - Odd
  6921.      M - Mark
  6922.      S - Space
  6923.     
  6924.      Example:
  6925.        ComParity = 'E'
  6926.        Writeln ComParity
  6927.     
  6928.     See Also: ComBaud ComDataBits ComStopBits
  6929.     
  6930.     Category: Modem
  6931.     
  6932.  
  6933.     Computer Tyme * MarxMenu * Users Manual                 Page #112
  6934.     -----------------------------------------------------------------
  6935.     
  6936.      ComPort : Number
  6937.     
  6938.     Sets or reads the port that communication commands will effect. The
  6939.     ComPost command must be executed first before any of the other
  6940.     communication parameters can be set.
  6941.     
  6942.      Example:
  6943.        ComPort = Com1
  6944.        Writeln ComPort
  6945.     
  6946.     Category: Modem
  6947.     
  6948.     
  6949.      ComProtocol : String
  6950.     
  6951.     During an upload or download ComProtocol returns the name of the
  6952.     transfer protocol being used.
  6953.     
  6954.     See Also: ComXmitStatusProgram
  6955.     
  6956.     Category: Modem
  6957.     
  6958.     
  6959.      ComReadChar : String
  6960.     
  6961.     Reads one character from the com port or input buffer. It will wait up
  6962.     to ComReadTimeout ticks for the character. If no character is received
  6963.     then ComTimeOut is set to True. If the ComStripHighBit command it set
  6964.     then this command will automatically remove the high-order bit when
  6965.     reading a character.
  6966.     
  6967.      Example:
  6968.        var Ch
  6969.        Ch = ComReadChar
  6970.     
  6971.     See Also: ComCharReady ComReadTimeout ComReadln
  6972.     
  6973.     Category: Modem
  6974.     
  6975.     
  6976.      ComReadln : String
  6977.     
  6978.     Reads a line from the com port or input buffer. It will wait up to
  6979.     ComReadTimeout ticks for the character. If no character is received then
  6980.     ComTimeOut is set to True.
  6981.     
  6982.      Example:
  6983.        if ComReadln = 'OK' then
  6984.     
  6985.     See Also: ComReadChar ComCharReady ComReadTimeout
  6986.     
  6987.  
  6988.     Computer Tyme * MarxMenu * Users Manual                 Page #113
  6989.     -----------------------------------------------------------------
  6990.     
  6991.     Category: Modem
  6992.     
  6993.     
  6994.      ComReadTimeout : Number
  6995.     
  6996.     This variable controls the number of timer ticks (18.2 ticks per second)
  6997.     that a read command will wait to receive data.
  6998.     
  6999.      Example:
  7000.         ComReadTimeout = 36  ;2 seconds
  7001.     
  7002.     Category: Modem
  7003.     
  7004.     
  7005.      ComRec1kXmodem (FileName)
  7006.     
  7007.     Receive a file using the  1k-Xmodem (XModem1k) transfer protocol.
  7008.     
  7009.      Example:
  7010.        ComRec1kXmodem 'MXMENU.ZIP'
  7011.     
  7012.     See Also: ComSend1kXmodem
  7013.     
  7014.     Category: Modem
  7015.     
  7016.     
  7017.      ComRecKermit
  7018.     
  7019.     Receive a file, or group of files, using the Kermit transfer protocol.
  7020.     
  7021.      Example:
  7022.        ComRecKermit
  7023.     
  7024.     See Also: ComSendKermit
  7025.     
  7026.     Category: Modem
  7027.     
  7028.     
  7029.      ComRecXmodem (FileName)
  7030.     
  7031.     Receive a file using the Xmodem transfer protocol. There are two
  7032.     versions of Xmodem (Checksum and CRC), the ComRecXmodem command is
  7033.     compatible with both versions.
  7034.     
  7035.      Example:
  7036.        ComRecXmodem 'MXMENU.ZIP'
  7037.     
  7038.     See Also: ComSendXmodem
  7039.     
  7040.     Category: Modem
  7041.     
  7042.  
  7043.     Computer Tyme * MarxMenu * Users Manual                 Page #114
  7044.     -----------------------------------------------------------------
  7045.     
  7046.      ComRecYmodem
  7047.     
  7048.     Receive a file, or group of files, using the Ymodem transfer protocol.
  7049.     
  7050.      Example:
  7051.        ComRecYmodem
  7052.     
  7053.     See Also: ComSendYmodem
  7054.     
  7055.     Category: Modem
  7056.     
  7057.     
  7058.      ComRecYmodemG
  7059.     
  7060.     Receive a file, or group of files, using the YmodemG transfer protocol.
  7061.     This protocol does not do any error checking and is therefore only
  7062.     advisable for use with Error correcting modems.
  7063.     
  7064.      Example:
  7065.        ComRecYmodemG
  7066.     
  7067.     See Also: ComSendYmodemG
  7068.     
  7069.     Category: Modem
  7070.     
  7071.     
  7072.      ComRecZmodem
  7073.     
  7074.     Receive a file, or group of files, using the Zmodem transfer protocol.
  7075.     
  7076.      Example:
  7077.        ComRecZmodem
  7078.     
  7079.     See Also: ComSendZmodem
  7080.     
  7081.     Category: Modem
  7082.     
  7083.     
  7084.      ComResult : Number
  7085.     
  7086.     ComResult is a variable like FileResult that returns the success status
  7087.     of com port activity. A result code or zero generally indicates success.
  7088.     
  7089.      Example:
  7090.        ComRecXmodem
  7091.        if ComResult <> 0 then Writeln 'Xfer Not Successful!'
  7092.     
  7093.     Category: Modem
  7094.     
  7095.  
  7096.     Computer Tyme * MarxMenu * Users Manual                 Page #115
  7097.     -----------------------------------------------------------------
  7098.     
  7099.      ComRI : Boolean
  7100.     
  7101.     Returns the status of the ring indicator line on serial ports.
  7102.     
  7103.      Example:
  7104.        if ComRI then Writeln 'Ringing'
  7105.     
  7106.     Category: Modem
  7107.     
  7108.     
  7109.      ComRTS (On/Off)
  7110.     
  7111.     Activates and deactivates RTS/CTS handshaking.
  7112.     
  7113.      Example:
  7114.        ComRTS On
  7115.     
  7116.     Category: Modem
  7117.     
  7118.     
  7119.      ComSendBreak
  7120.     
  7121.     Sends a break signal out the modem.
  7122.     
  7123.     See Also: ComBreakReceived
  7124.     
  7125.     Category: Modem
  7126.     
  7127.     
  7128.      ComSend1kXmodem (FileName)
  7129.     
  7130.     Send a file using the 1k-Xmodem (Xmodem1k) transfer protocol.
  7131.     
  7132.      Example:
  7133.        ComSend1kXmodem 'MXMENU.ZIP'
  7134.     
  7135.     See Also: ComRec1kXmodem
  7136.     
  7137.     Category: Modem
  7138.     
  7139.     
  7140.      ComSendKermit (FileName or Array)
  7141.     
  7142.     Send a file, or group of files, using the Kermit transfer protocol. If
  7143.     you pass a filename it sends the file. If you pass an arrayname then
  7144.     send all the files in the array list.
  7145.     
  7146.      Example:
  7147.        ComSendKermit 'MXMENU.ZIP'          ;Send MXMENU.ZIP via Kermit
  7148.     
  7149.      Example:
  7150.        Var FileList
  7151.        AppendArray(FileList,'FILE1')
  7152.        AppendArray(FileList,'FILE2')
  7153.        ComSendKermit FileList              ;Send FILE1 & FILE2 via kermit
  7154.     
  7155.  
  7156.     Computer Tyme * MarxMenu * Users Manual                 Page #116
  7157.     -----------------------------------------------------------------
  7158.     
  7159.     See Also: ComRecKermit
  7160.     
  7161.     Category: Modem
  7162.     
  7163.     
  7164.      ComSendXmodem (FileName)
  7165.     
  7166.     Send a file using the Xmodem transfer protocol. There are two versions
  7167.     of Xmodem (Checksum and CRC), the ComRecXmodem command is compatible
  7168.     with both versions.
  7169.     
  7170.      Example:
  7171.        ComSendXmodem 'MXMENU.ZIP'
  7172.     
  7173.     See Also: ComRecXmodem
  7174.     
  7175.     Category: Modem
  7176.     
  7177.     
  7178.      ComSendYmodem (FileName or Array)
  7179.     
  7180.     Send a file, or a group of files, using the Ymodem transfer protocol. If
  7181.     you pass a file name then it sends the file. If you pass it an array
  7182.     then it will send all the files in the array list.
  7183.     
  7184.      Example:
  7185.        ComSendYmodem 'MXMENU.ZIP'
  7186.     
  7187.      Example:
  7188.        Var FileList
  7189.        AppendArray(FileList,'FILE1')
  7190.        AppendArray(FileList,'FILE2')
  7191.        ComSendYmodem FileList
  7192.     
  7193.     See Also: ComRecYmodem
  7194.     
  7195.     Category: Modem
  7196.     
  7197.     
  7198.      ComSendYmodemG (FileName or Array)
  7199.     
  7200.     Send a file, or group of files, using the YmodemG transfer protocol. If
  7201.     you pass a file name then it sends that file. If you pass an array then
  7202.     it will send all the files in the array list. This protocol does not do
  7203.     any error checking and is therefore only advisable for use with Error
  7204.     correcting modems.
  7205.     
  7206.      Example:
  7207.        ComSendYmodemG 'MXMENU.ZIP'
  7208.     
  7209.      Example:
  7210.        Var FileList
  7211.        AppendArray(FileList,'FILE1')
  7212.        AppendArray(FileList,'FILE2')
  7213.        ComSendYmodemG FileList
  7214.     
  7215.  
  7216.     Computer Tyme * MarxMenu * Users Manual                 Page #117
  7217.     -----------------------------------------------------------------
  7218.     
  7219.     See Also: ComRecYmodemG
  7220.     
  7221.     Category: Modem
  7222.     
  7223.     
  7224.      ComSendZmodem (FileName or Array)
  7225.     
  7226.     Send a file, or group of files, using the Zmodem protocol. If you pass a
  7227.     file name then it sends that file. If you pass an array then it will
  7228.     send all the files in that array list.
  7229.     
  7230.      Example:
  7231.        ComSendZmodem 'MXMENU.ZIP'
  7232.     
  7233.      Example:
  7234.        Var FileList
  7235.        AppendArray(FileList,'FILE1')
  7236.        AppendArray(FileList,'FILE2')
  7237.        ComSendZmodem FileList
  7238.     
  7239.     See Also: ComRecZmodem
  7240.     
  7241.     Category: Modem
  7242.     
  7243.     
  7244.      ComStopBits : Number
  7245.     
  7246.     Reads or sets the number of stop bits. Range 1 - 2 bits.
  7247.     
  7248.      Example:
  7249.        ComStopBits = 1
  7250.        Writeln ComStopBits
  7251.     
  7252.     See Also: ComBaud ComDataBits ComParity
  7253.     
  7254.     Category: Modem
  7255.     
  7256.     
  7257.      ComStripHighBit (On/Off)
  7258.     
  7259.     This command when set to on (true), will automatically remove the
  7260.     high-order bit when using the ComReadChar command. File transfers and
  7261.     the ComReadLn command are unaffected by this command.
  7262.     
  7263.     See Also: ComReadChar
  7264.     
  7265.     Category: Modem
  7266.     
  7267.  
  7268.     Computer Tyme * MarxMenu * Users Manual                 Page #118
  7269.     -----------------------------------------------------------------
  7270.     
  7271.      ComThisLine : String
  7272.     
  7273.     ComThisLine returns a string of characters that has been received from
  7274.     the com port since the last CR. This can be used to see what prompts are
  7275.     being received for automatic script processing.
  7276.     
  7277.      Example:
  7278.        if pos('Password',ComThisLine) > 0
  7279.           ComWriteln 'Beast'
  7280.        endif
  7281.     
  7282.     Category: Modem
  7283.     
  7284.     
  7285.      ComTimeout : Boolean
  7286.     
  7287.     ComTimeout is set to True if the last command ended in a timeout error.
  7288.     
  7289.      Example:
  7290.        if ComTimeout then Writeln 'Something is stuck!'
  7291.     
  7292.     Category: Modem
  7293.     
  7294.     
  7295.      ComTotalErrors : Number
  7296.     
  7297.     During an upload or download ComTotalErrors returns the number of
  7298.     errors that occurred during the current file transfer.
  7299.     
  7300.     See Also: ComXmitStatusProgram
  7301.     
  7302.     Category: Modem
  7303.     
  7304.     
  7305.      ComUseInt14
  7306.     
  7307.     ComUseInt14 sets MarxMenu to talk to the ports through the Int14 serial
  7308.     port routines. This can be used for network modem sharing applications
  7309.     or if for some reason you don't want to talk to the UART directly. The
  7310.     default Int14 routines are unbuffered.
  7311.     
  7312.     Because of the limitations of the Int14 routines many of the more
  7313.     advance MarxMenu communications commands do nothing when this option is
  7314.     activated.
  7315.     
  7316.     Category: Modem
  7317.     
  7318.  
  7319.     Computer Tyme * MarxMenu * Users Manual                 Page #119
  7320.     -----------------------------------------------------------------
  7321.     
  7322.      ComUseUart
  7323.     
  7324.     ComUseUart sets MarxMenu to talk to the UART directly. This is the
  7325.     default mode. This command can be used to switch back if you used the
  7326.     ComUseInt14 command.
  7327.     
  7328.     Category: Modem
  7329.     
  7330.     
  7331.      ComWatchCD : Boolean
  7332.     
  7333.     When ComWatchCD is set to true MarxMenu watches the carrier detect
  7334.     signal. If carrier detect is lost then several things happen. ComCDAbort
  7335.     is set to true. ComEchoSendChar and ComEchoRecChar are set to false.
  7336.     ComWrite and ComWriteln are disabled. ComCharReady is always true and
  7337.     ComReadChar returns a char 0 when read.
  7338.     
  7339.     This function is there to reset a host program without having to build
  7340.     in a lot of error checking into the MarxMenu script. Setting ComWatchCD
  7341.     to false resets everything and allows you to prepare for the next call.
  7342.     
  7343.     Only set ComWatchCD to true after you receive a carrier detect signal.
  7344.     It is also recommended that you insert a half second delay after
  7345.     receiving a connect to deal with slow modems in fast computers.
  7346.     
  7347.     Category: Modem
  7348.     
  7349.     
  7350.      ComWrite (String)
  7351.     
  7352.     Writes a string to the com port with no CR.
  7353.     
  7354.      Example:
  7355.        ComWrite '+++'
  7356.     
  7357.     See Also: ComWriteln ComWriteTimeout
  7358.     
  7359.     Category: Modem
  7360.     
  7361.     
  7362.      ComWriteln (String)
  7363.     
  7364.     Writes a string to the com port with CR.
  7365.     
  7366.      Example:
  7367.        ComWriteln 'ATDT 1-417-866-1665'
  7368.     
  7369.     See Also: ComWrite ComWriteTimeout
  7370.     
  7371.     Category: Modem
  7372.     
  7373.  
  7374.     Computer Tyme * MarxMenu * Users Manual                 Page #120
  7375.     -----------------------------------------------------------------
  7376.     
  7377.      ComWriteTimeout : Number
  7378.     
  7379.     This variable controls the number of timer ticks (18.2 ticks per second)
  7380.     that a write command will wait to send data.
  7381.     
  7382.      Example:
  7383.         ComWriteTimeout = 36  ;2 seconds
  7384.     
  7385.     Category: Modem
  7386.     
  7387.     
  7388.      ComXmitAbortProgram
  7389.     
  7390.     ComXmitAbortProgram is called while uploads and downloads are in
  7391.     progress. If this is set to a MarxMenu procedure then you can write your
  7392.     own control routine to control protocol abort. Your program needs to
  7393.     return either a true to abort or a false to not abort.
  7394.     
  7395.      Example:
  7396.        ComXmitAbortProgram = loc XmitAbort
  7397.     
  7398.        Procedure XmitAbort
  7399.           if not KbdReady then Return False
  7400.           Return ReadKey = Esc
  7401.        EndProc
  7402.     
  7403.     See Also: ComXmitStatusProgram
  7404.     
  7405.     Category: Modem
  7406.     
  7407.     
  7408.      ComXmitEnding : Boolean
  7409.     
  7410.     This variable is set to true to indicate the ending for an upload or
  7411.     download. It is used to end a communications status window.
  7412.     
  7413.     See Also: ComXmitStatusProgram ComXmitStarting
  7414.     
  7415.     Category: Modem
  7416.     
  7417.     
  7418.      ComXmitStarting : Boolean
  7419.     
  7420.     This variable is set to True to indicate the beginning for an upload or
  7421.     download. It is used to start a communications status window.
  7422.     
  7423.     See Also: ComXmitStatusProgram ComXmitEnding
  7424.     
  7425.     Category: Modem
  7426.     
  7427.  
  7428.     Computer Tyme * MarxMenu * Users Manual                 Page #121
  7429.     -----------------------------------------------------------------
  7430.     
  7431.      ComXmitStatusProgram
  7432.     
  7433.     ComXmitStatusProgram is called while uploads and downloads are in
  7434.     progress. If this is set to a MarxMenu procedure then you can write your
  7435.     own status display routine to show progress status.
  7436.     
  7437.     See Also: ComXmitAbortProgram
  7438.     
  7439.     Category: Modem
  7440.     
  7441.     
  7442.      Comment
  7443.     
  7444.     Starts a Comment Block. All text is ignored until EndComment is
  7445.     encountered.
  7446.     
  7447.      Example:
  7448.        Comment
  7449.        =======================================
  7450.     
  7451.        Everything between Comment and EndComment is ignored.
  7452.     
  7453.        =======================================
  7454.        EndComment
  7455.     
  7456.     See Also: EndComment
  7457.     
  7458.     Category: Misc
  7459.     
  7460.     
  7461.      Console (On/Off)
  7462.     
  7463.     MarxMenu has an built-in system control console that the user can
  7464.     activate by pressing the Tab key. This allows them to dynamically set
  7465.     the screen blanker parameters. The command "CONSOLE OFF" will disable
  7466.     the Tab key function to prevent access console control box.
  7467.     
  7468.     Category: Display
  7469.     
  7470.     
  7471.      ConsoleBorderColor (Color,Color)
  7472.     
  7473.     Sets the color of the console border.
  7474.     
  7475.     See Also: ConsolePos
  7476.     
  7477.     Category: Color
  7478.     
  7479.  
  7480.     Computer Tyme * MarxMenu * Users Manual                 Page #122
  7481.     -----------------------------------------------------------------
  7482.     
  7483.      ConsoleHeaderColor (Color,Color)
  7484.     
  7485.     Sets the color of the console header.
  7486.     
  7487.     See Also: ConsolePos
  7488.     
  7489.     Category: Color
  7490.     
  7491.     
  7492.      ConsoleInsideColor (Color,Color)
  7493.     
  7494.     Sets the color of the console inside.
  7495.     
  7496.     See Also: ConsolePos
  7497.     
  7498.     Category: Color
  7499.     
  7500.     
  7501.      ConsolePos (Column,Row)
  7502.     
  7503.     Sets the coordinates of the pop-up console menu.
  7504.     
  7505.      Example:
  7506.        ConsoleBorderColor( White,Blue )
  7507.        ConsoleHeaderColor( Yellow,Blue )
  7508.        ConsoleInsideColor( Yellow,Blue )
  7509.        ConsolePos( 5,5 )               ; Column 5, Row 5
  7510.     
  7511.     Category: Display
  7512.     
  7513.     
  7514.      Const
  7515.     
  7516.     Creates a constant.
  7517.     
  7518.      Example:
  7519.        Const
  7520.          X = 50
  7521.          St = 'MARXMENU'
  7522.          Flag = True
  7523.     
  7524.     See Also: Var Shared Qualifier
  7525.     
  7526.     Category Variable
  7527.     
  7528.     
  7529.      Cos (Radians) : Real
  7530.     
  7531.     Returns the Cosine of a real.
  7532.     
  7533.     Category: Math Float
  7534.     
  7535.  
  7536.     Computer Tyme * MarxMenu * Users Manual                 Page #123
  7537.     -----------------------------------------------------------------
  7538.     
  7539.      CountryCode : Number
  7540.     
  7541.     Returns the international country code from DOS. The country code is the
  7542.     same number as the international telephone dialing code prefix.
  7543.     
  7544.     Category: International
  7545.     
  7546.     
  7547.      CpuClass : Number
  7548.     
  7549.     Reads the type of CPU you are using and returns a number.
  7550.     
  7551.      1 - 8088, 8086, 80186, V20, V30
  7552.      2 - 80286
  7553.      3 - 80386
  7554.      4 - 80486
  7555.     
  7556.      Example:
  7557.        var Temp
  7558.        Temp = CPUClass   ;<- Read CPu Type into Var Temp
  7559.     
  7560.        if Temp = 1
  7561.           Writeln "This System is an XT Class Machine!"
  7562.     
  7563.        elseif Temp = 2
  7564.           Writeln "This System is an AT Class Machine!"
  7565.     
  7566.        elseif Temp = 3
  7567.           Writeln "That 386 is a powerful machine."
  7568.     
  7569.        else
  7570.           Writeln "Do you really rate having a 486?"
  7571.     
  7572.        endif
  7573.     
  7574.     See Also: CpuName McpClass
  7575.     
  7576.     Category: System
  7577.     
  7578.     
  7579.      CpuName : String
  7580.     
  7581.     Returns the name of the CPU. CPU names include:
  7582.     
  7583.       8088, 8086, V20 ,V30, 80188, 80186, 80286,
  7584.       80386, 80386SX, 80486, 80486SX
  7585.     
  7586.     See Also: CpuClass McpName
  7587.     
  7588.     Category: System
  7589.     
  7590.  
  7591.     Computer Tyme * MarxMenu * Users Manual                 Page #124
  7592.     -----------------------------------------------------------------
  7593.     
  7594.      CurrencySymbol : String
  7595.     
  7596.     Returns the currency symbol based on the country code.
  7597.     
  7598.     Category: International
  7599.     
  7600.     
  7601.      CurrentDirectory : String
  7602.     
  7603.     Returns the current directory.
  7604.     
  7605.      Example:
  7606.        Writeln CurrentDirectory
  7607.     
  7608.     Category: String
  7609.     
  7610.     
  7611.      CurrentEnvironment
  7612.     
  7613.     CurrentEnvironment selects the current environment for use with
  7614.     environment access commands.
  7615.     
  7616.     See Also: ReadEnv SetEnv ReadEnvironment ShellEnvironment
  7617.     See Also: ParentEnvironment MasterEnvironment
  7618.     
  7619.     Category: Environment
  7620.     
  7621.     
  7622.      CurrentWindow : Number
  7623.     
  7624.     Returns the number of the current window. All windows are given a unique
  7625.     number.
  7626.     
  7627.      Example:
  7628.        ThisWindow = CurrentWindow
  7629.     
  7630.     See Also: SetTopWindow
  7631.     
  7632.     Category: Display
  7633.     
  7634.     
  7635.      Cursor (On/Off)
  7636.     
  7637.     MarxMenu automatically turns the cursor on for certain kinds of input.
  7638.     Using Cursor Off prevents MarxMenu from turning the cursor on. Cursor On
  7639.     reverses this and allows MarxMenu to turn the cursor on when needed.
  7640.     
  7641.      Example:
  7642.        Cursor Off
  7643.     
  7644.     Category: Video
  7645.     
  7646.  
  7647.     Computer Tyme * MarxMenu * Users Manual                 Page #125
  7648.     -----------------------------------------------------------------
  7649.     
  7650.      CustomBox (String)
  7651.     
  7652.     Selects a Box border using an 8-character string to define the sides
  7653.     and the corners.
  7654.     
  7655.      Example:
  7656.        CustomBox ('12345678') ;This will help you figure out what
  7657.                               ;position matches which side.
  7658.     
  7659.     See Also: SingleLineBox DoubleLineBox BlockBox NoBoxBorder
  7660.     
  7661.     Category: Display
  7662.     
  7663.     
  7664.      DateSeparator : String
  7665.     
  7666.     Returns the date separator character from the country information.
  7667.     
  7668.     See Also: TimeSeparator DecimalSeparator CountryCode
  7669.     
  7670.     Category: International Time
  7671.     
  7672.     
  7673.      DateString (Time) : String
  7674.     
  7675.     Returns the date of a time value as text. If no parameter is passed then
  7676.     Now is assumed. Uses international date format rules.
  7677.     
  7678.      Example:
  7679.        Writeln DateString            ;returns the date of Now as text
  7680.        Writeln DateString (Tomorrow) ;returns the date of Tomorrow as text
  7681.     
  7682.     Category: Time String International
  7683.     
  7684.     
  7685.      Day : Number
  7686.     
  7687.     Returns the day of the month.
  7688.     
  7689.     Category: Time
  7690.     
  7691.     
  7692.      DayOf (Date) : Number
  7693.     
  7694.     Returns the day of a date. If Date is passed as a string it is
  7695.     converted automatically.
  7696.     
  7697.      Example:
  7698.        DayOf('April 22, 1992')  ;returns 22
  7699.     
  7700.     See Also: TimeOf BadDate
  7701.     
  7702.  
  7703.     Computer Tyme * MarxMenu * Users Manual                 Page #126
  7704.     -----------------------------------------------------------------
  7705.     
  7706.     Category: Time
  7707.     
  7708.     
  7709.      DayOfWeek : Number
  7710.     
  7711.     Returns the day of the week.
  7712.     
  7713.       0=SUNDAY
  7714.       1=MONDAY
  7715.       2=TUESDAY
  7716.       3=WEDNESDAY
  7717.       4=THURSDAY
  7718.       5=FRIDAY
  7719.       6=SATURDAY
  7720.     
  7721.     Category: Time
  7722.     
  7723.     
  7724.      DayOfWeekOf (Date) : Number
  7725.     
  7726.     Returns the DayOfWeek of a date. If Date is passed as a string it is
  7727.     converted automatically.
  7728.     
  7729.      Example:
  7730.        DayOfWeekOf('April 22, 1992')  ;returns 4
  7731.     
  7732.     See Also: TimeOf BadDate
  7733.     
  7734.     Category: Time
  7735.     
  7736.     
  7737.      DecimalSeparator : String
  7738.     
  7739.     Returns the decimal separator character from the country information.
  7740.     
  7741.     See Also: TimeSeparator DateSeparator CountryCode
  7742.     
  7743.     Category: International
  7744.     
  7745.     
  7746.      Delete (String,Pos,Count)
  7747.     
  7748.     Deletes characters from string starting at pos for count.
  7749.     
  7750.      Example:
  7751.        String = 'ABCDEFGH'
  7752.        Delete(String,2,3)
  7753.     
  7754.     This leaves a String containing 'AEFGH'
  7755.     
  7756.     If count exceeds the length of the string, the string is truncated at
  7757.     pos.
  7758.     
  7759.  
  7760.     Computer Tyme * MarxMenu * Users Manual                 Page #127
  7761.     -----------------------------------------------------------------
  7762.     
  7763.     Another use of Delete is to delete elements of an array.
  7764.     
  7765.     Delete (Array,Position,Count)
  7766.     This works exactly like the delete command for strings. It delete
  7767.     elements of an array beginning at Position for Count elements. The
  7768.     NumberOfElements is adjusted accordingly.
  7769.     
  7770.      Example:
  7771.        MyArray[1] = "ONE"
  7772.        MyArray[2] = "TWO"
  7773.        MyArray[3] = "THREE"
  7774.        MyArray[4] = "FOUR"
  7775.        Delete( MyArray,2,2 )
  7776.     
  7777.      ;MyArray now contains..
  7778.        MyArray[1] = "ONE"
  7779.        MyArray[2] = "FOUR"
  7780.     
  7781.     Category: String Array
  7782.     
  7783.     
  7784.      DelFile (Name)
  7785.     
  7786.     Deletes a file by name. FileResult returns a 0 if the file existed and
  7787.     the delete was successful.
  7788.     
  7789.      Example:
  7790.        DelFile( 'C:\NOTES\READ.ME' )
  7791.        If FileResult = 0
  7792.          Writeln('C:\NOTES\READ.ME was successfully deleted!')
  7793.        Else
  7794.          Writeln('C:\NOTES\READ.ME was NOT deleted successfully!')
  7795.        EndIf
  7796.     
  7797.     Category: File
  7798.     
  7799.     
  7800.      Devices (Array)
  7801.     
  7802.     Fills array with list of all devices.
  7803.     
  7804.      Example:
  7805.        var temp
  7806.        devices(temp)                   ;Device list --> array temp
  7807.        loop temp                       ;Loop thru the array
  7808.             writeln temp[loopindex]    ;And Print contents
  7809.        endloop
  7810.     
  7811.     Category: Array
  7812.     
  7813.  
  7814.     Computer Tyme * MarxMenu * Users Manual                 Page #128
  7815.     -----------------------------------------------------------------
  7816.     
  7817.      DirectoriesOnly (On/Off)
  7818.     
  7819.     Forces ReadDirectory to read directories instead of file names.
  7820.     
  7821.     See Also: ReadDirectory
  7822.     
  7823.     Category: Directory
  7824.     
  7825.     
  7826.      DisplayType : Number
  7827.     
  7828.     Returns the current video card type.
  7829.     
  7830.      0 = HercMono
  7831.      1 = CGA
  7832.      2 = MCGA
  7833.      3 = EGA
  7834.      4 = VGA
  7835.      5 = PGC
  7836.     
  7837.     MarxMenu also understands the above constant names. For example, if you
  7838.     want to test for a CGA card:
  7839.     
  7840.      if DisplayType = CGA then ....
  7841.     
  7842.     Category: Video
  7843.     
  7844.     
  7845.      DiskType (Drive) : String
  7846.     
  7847.     DiskType returns the type of disk of a drive letter. Types recognized
  7848.     are:
  7849.     
  7850.      FLOPPY360
  7851.      FLOPPY720
  7852.      FLOPPY12
  7853.      FLOPPY14
  7854.      RAMDISK
  7855.      SUBST
  7856.      HARDDISK
  7857.      BERNOULI
  7858.      NOVELL
  7859.      CDROM
  7860.      UNKNOWN
  7861.      INVALID
  7862.     
  7863.      Example:
  7864.      Writeln DiskType('F')
  7865.     
  7866.     This command will actually read floppy drives which could be slow. The
  7867.     DriveType command can be used to read the floppy drive configuration in
  7868.     CMOS memory.
  7869.     
  7870.  
  7871.     Computer Tyme * MarxMenu * Users Manual                 Page #129
  7872.     -----------------------------------------------------------------
  7873.     
  7874.     See Also: DriveType
  7875.     
  7876.     Category: System
  7877.     
  7878.     
  7879.      Dispose (Variable)
  7880.     
  7881.     This command reclaims memory used by a string variable, file variable,
  7882.     or an array. If you are doing a lot of data manipulation, you might want
  7883.     to reclaim memory space used by arrays you are done with. The disposed
  7884.     variable becomes an untyped variable.
  7885.     
  7886.      Example:
  7887.        Loop( 20 )
  7888.          MyArray[LoopIndex] = LoopIndex
  7889.     
  7890.          ;Check to See Also: if number is odd or even
  7891.          If (MyArray[LoopIndex] Mod 2) = 0
  7892.            Writeln('MyArray[' + Str(LoopIndex) + '] is an EVEN number.' );
  7893.          Else
  7894.            Writeln('MyArray[' + Str(LoopIndex) + '] is an EVEN number.' );
  7895.          EndIf
  7896.        EndLoop
  7897.     
  7898.        ;We're finished with the array so reclaim its memory space.
  7899.        Dispose(MyArray)
  7900.     
  7901.     Category: Memory Array
  7902.     
  7903.     
  7904.      DosVersion : Number
  7905.     
  7906.     Returns the major DOS version number.
  7907.     
  7908.     See Also: DosVersionString MinorDosVersion
  7909.     
  7910.     Category: System
  7911.     
  7912.     
  7913.      DosVersionString : String
  7914.     
  7915.     Returns the DOS version number as a 4 character string. This function
  7916.     always returns 2 places past the decimal point. The form of the string
  7917.     is: #.##
  7918.     
  7919.      Example
  7920.         Writeln DosVersionString   ;prints 4.01
  7921.     
  7922.     See Also: DosVersion MinorDosVersion
  7923.     
  7924.     Category: System String
  7925.     
  7926.  
  7927.     Computer Tyme * MarxMenu * Users Manual                 Page #130
  7928.     -----------------------------------------------------------------
  7929.     
  7930.      DosWindow (On/Off)
  7931.     
  7932.     When you set DosWindow on, MarxMenu will not drop out of the menu system
  7933.     when you use the Execute command. It will give you a display of the DOS
  7934.     screen within the current window. The program you execute must be a
  7935.     well-behaved program like DIR or COPY or some of the other DOS commands
  7936.     that talk to the screen through standard file handles, otherwise is it
  7937.     possible for the application to corrupt your MarxMenu display.
  7938.     
  7939.     See Also: Execute
  7940.     
  7941.     Category: Execution
  7942.     
  7943.     
  7944.      DoubleLineBox
  7945.     
  7946.     Selects double line box.
  7947.     
  7948.     See Also: SingleLineBox BlockBox CustomBox NoBoxBorder
  7949.     
  7950.     Category: Display
  7951.     
  7952.     
  7953.      DPMIInstalled : Boolean
  7954.     
  7955.     Returns True if DPMI services are installed.
  7956.     
  7957.     See Also: DPMIVersion
  7958.     
  7959.     Category: System
  7960.     
  7961.     
  7962.      DPMIVersion : String
  7963.     
  7964.     DPMIVersion returns the version of the DPMI driver you are using. If
  7965.     DPMI isn't present it returns an empty string.
  7966.     
  7967.     See Also: DPMIInstalled
  7968.     
  7969.     Category: System
  7970.     
  7971.     
  7972.      DrawBox (column,row,width,height)
  7973.     
  7974.     Draws a box on the screen. The (column) and (row) are the upper left
  7975.     corner, (width) and (height) is the box size.
  7976.     
  7977.      Example:
  7978.        Explode On
  7979.        Shadow On
  7980.        DoubleLineBox
  7981.        BoxHeaderColor( Yellow,Red )
  7982.        BoxBorderColor( White, Red )
  7983.        BoxInsideColor( Yellow,Red )
  7984.        InverseColor( Black, Gray )
  7985.        CapsColor( Black, Red )
  7986.        BoxHeader = ' << Main Menu >> '
  7987.        DrawBox( 30,10,40,8 )
  7988.     
  7989.  
  7990.     Computer Tyme * MarxMenu * Users Manual                 Page #131
  7991.     -----------------------------------------------------------------
  7992.     
  7993.     DrawBox also creates a logical layer for several display variables.
  7994.     These variables include TextColor, InverseColor, CapsColor. It is
  7995.     important to use these color control commands AFTER the DrawBox command
  7996.     in order to properly restore the colors of the previous DrawBox.
  7997.     
  7998.     If you call up a box and upon finishing it adversely affects the colors
  7999.     of the previous box, you probably used color control commands BEFORE the
  8000.     DrawBox instead of AFTER.
  8001.     
  8002.     Category: Display
  8003.     
  8004.     
  8005.      Drives : Number
  8006.     
  8007.     Returns the number of drives. This includes drive names that can be
  8008.     substituted. Most of the time the answer is 5. This relates to your
  8009.     LastDrive = command in your CONFIG.SYS file.
  8010.     
  8011.     Category: System
  8012.     
  8013.     
  8014.      DriveType (Drive) : String
  8015.     
  8016.     DriveType returns the type of drive of a given drive letter. This is
  8017.     like DiskType with the exception of how it deals with floppy drives.
  8018.     DiskType actually tries to read the floppy so if you put a 720k disk in
  8019.     a 1.4 meg drive then DiskType will return 720. DriveType returns the
  8020.     type of drive the CMOS is configured for.
  8021.     
  8022.     See Also: DiskType
  8023.     
  8024.     Category: System
  8025.     
  8026.     
  8027.      DvAppNumber : Number
  8028.     
  8029.     Returns the DesqView application number or DesqView window number.
  8030.     
  8031.     Category: DesqView
  8032.     
  8033.     
  8034.      DvFrame (Handle,On/Off)
  8035.     
  8036.     Turns the DesqView border frame On or Off for a particular task
  8037.     identified by Handle.
  8038.     
  8039.     Category: DesqView
  8040.     
  8041.  
  8042.     Computer Tyme * MarxMenu * Users Manual                 Page #132
  8043.     -----------------------------------------------------------------
  8044.     
  8045.      DvFreeze (Handle)
  8046.     
  8047.     Freezes a program. The program stops executing.
  8048.     
  8049.     See Also: DvUnFreeze DvPifExecute DvLastHandle
  8050.     
  8051.     Category: DesqView
  8052.     
  8053.     
  8054.      DvHide (Handle)
  8055.     
  8056.     Hides all output from program making it invisible. The program still
  8057.     continues to run.
  8058.     
  8059.     See Also: DvUnHide
  8060.     
  8061.     Category: DesqView
  8062.     
  8063.     
  8064.      DvKillTask (Handle)
  8065.     
  8066.     Kills a program running under DesqView. The handle is the one returned
  8067.     by DvPifExecute in DvLastHandle.
  8068.     
  8069.     See Also: DvPifExecute
  8070.     
  8071.     Category: DesqView
  8072.     
  8073.     
  8074.      DvLastHandle : Number
  8075.     
  8076.     Returns a number that is associated with a program running under
  8077.     DesqView. This number is used to control other programs running under
  8078.     DesqView. It is set by DvPifExecute.
  8079.     
  8080.     See Also: DvPifExecute
  8081.     
  8082.     Category: DesqView
  8083.     
  8084.     
  8085.      DvLoaded : Boolean
  8086.     
  8087.     Returns true if DesqView is loaded.
  8088.     
  8089.     Category: DesqView
  8090.     
  8091.     
  8092.      DvMoveWindow (Handle,X,Y)
  8093.     
  8094.     Moves DesqView window upper left corner to position X,Y.
  8095.     
  8096.     Category: DesqView
  8097.     
  8098.  
  8099.     Computer Tyme * MarxMenu * Users Manual                 Page #133
  8100.     -----------------------------------------------------------------
  8101.     
  8102.      DvMyHandle : Number
  8103.     
  8104.     Returns the DesqView handle of the current process.
  8105.     
  8106.     See Also: DvLastHandle
  8107.     
  8108.     Category: DesqView
  8109.     
  8110.     
  8111.      DvPifExecute (Pif File)
  8112.     
  8113.     Executes another program under DesqView in another window. MarxMenu
  8114.     stays resident in its original window. The window executes according to
  8115.     the contents of the DesqView PIF file. The PIF file can be specified by
  8116.     using the full name. If you leave off the extension, MarxMenu assumes
  8117.     the extension DVP. If you pass a 2-character name, like the two
  8118.     characters in the DesqView menus, then MarxMenu will add -PIF.DVP to the
  8119.     name. If the PIF file is on the path, MarxMenu will find it.
  8120.     
  8121.     Warning! DesqView must be loaded to run this command.
  8122.     
  8123.      Example:
  8124.        DvPifExecute 'BD'
  8125.        DvPifExecute 'BD-PIF'       ;These all execute Big DOS
  8126.        DVPifExecute 'BD-PIF.DVP'
  8127.     
  8128.     The task handle is loaded into a variable named DvLastHandle. When the
  8129.     program starts, it becomes the current top program.
  8130.     
  8131.     See Also: DvLoaded DvLastHandle
  8132.     
  8133.     Category: DesqView
  8134.     
  8135.     
  8136.      DvResizeWindow (Handle,Width,Height)
  8137.     
  8138.     Changes the size of a DesqView window.
  8139.     
  8140.     Category: DesqView
  8141.     
  8142.     
  8143.      DvSetBottom (Handle)
  8144.     
  8145.     Sets the program associated with the handle to the bottom of the task
  8146.     stack.
  8147.     
  8148.     See Also: DvSetTop
  8149.     
  8150.     Category: DesqView
  8151.     
  8152.  
  8153.     Computer Tyme * MarxMenu * Users Manual                 Page #134
  8154.     -----------------------------------------------------------------
  8155.     
  8156.      DvSetTop (Handle)
  8157.     
  8158.     Sets the program associated with the handle to be the top running task.
  8159.     Using DvMyHandle allows MarxMenu to regain control after starting
  8160.     another task.
  8161.     
  8162.      Example:
  8163.         DvSetTop (DvMyHandle)
  8164.     
  8165.     See Also: DvSetBottom DvLastHandle
  8166.     
  8167.     Category: DesqView
  8168.     
  8169.     
  8170.      DvUnFreeze (Handle)
  8171.     
  8172.     UnFreezes a program. The program starts executing again.
  8173.     
  8174.     See Also: DvFreeze DvPifExecute DvLastHandle
  8175.     
  8176.     Category: DesqView
  8177.     
  8178.     
  8179.      DvUnHide (Handle)
  8180.     
  8181.     Reverses the effect of DvHide making program output visible again.
  8182.     
  8183.     See Also: DvHide
  8184.     
  8185.     Category: DesqView
  8186.     
  8187.     
  8188.      Else
  8189.     
  8190.     Starts lines executed if a condition is not true.
  8191.     
  8192.      Example:
  8193.        if X = 1
  8194.           Writeln 'One'
  8195.        else
  8196.           Writeln 'Not One'
  8197.        endif
  8198.     
  8199.     See Also: If Then Endif ElseIf
  8200.     
  8201.     Category: Conditional
  8202.     
  8203.  
  8204.     Computer Tyme * MarxMenu * Users Manual                 Page #135
  8205.     -----------------------------------------------------------------
  8206.     
  8207.      ElseIf
  8208.     
  8209.     Used with IF, ELSE, and ENDIF in conditional statements. After one
  8210.     ElseIf is true, execution continues after the endif statement.
  8211.     
  8212.      Example:
  8213.        if X = 1
  8214.           Writeln 'One'
  8215.     
  8216.        elseif X = 2
  8217.           Writeln 'Two'
  8218.     
  8219.        elseif X = 3
  8220.           Writeln 'Three'
  8221.     
  8222.        elseif X = 4
  8223.           Writeln 'Four'
  8224.     
  8225.        else
  8226.           Writeln 'Other'
  8227.     
  8228.        endif
  8229.     
  8230.     See Also: If Then Endif Else
  8231.     
  8232.     Category: Conditional
  8233.     
  8234.     
  8235.      EmsInstalled : Boolean
  8236.     
  8237.     Returns True if EMS memory manager is installed.
  8238.     
  8239.     See Also: EmsVersion
  8240.     
  8241.     Category: System
  8242.     
  8243.     
  8244.      EmsVersion : String
  8245.     
  8246.     EmsVersion returns the version of the EMS driver you are using. If EMS
  8247.     isn't present it returns an empty string.
  8248.     
  8249.     See Also: EmsInstalled
  8250.     
  8251.     Category: System
  8252.     
  8253.  
  8254.     Computer Tyme * MarxMenu * Users Manual                 Page #136
  8255.     -----------------------------------------------------------------
  8256.     
  8257.      EndComment
  8258.     
  8259.     Ends a comment block.
  8260.     
  8261.      Example:
  8262.        Comment
  8263.        =======================================
  8264.     
  8265.        Everything between Comment and EndComment is ignored.
  8266.     
  8267.        =======================================
  8268.        EndComment
  8269.     
  8270.     See Also: Comment
  8271.     
  8272.     Category: Misc
  8273.     
  8274.     
  8275.      EndIf
  8276.     
  8277.     Ends an if statement.
  8278.     
  8279.      Example:
  8280.        writeln "EndIf Example"
  8281.        if DayOfWeekof(Today)=2                             ;Code Between IF
  8282.           Writeln 'This line will only print on Tuesdays'  ;and ENDIF will
  8283.        endif                                               ;run if cond=True
  8284.        writeln "This line will always execute"
  8285.     
  8286.     See Also: If Else ElseIf Then
  8287.     
  8288.     Category: Conditional
  8289.     
  8290.     
  8291.      EndLoop
  8292.     
  8293.     Ends a loop statement.
  8294.     
  8295.     See Also: Loop LoopIndex LoopLimit
  8296.     
  8297.     Category: Conditional
  8298.     
  8299.     
  8300.      EndOfFile (FileVar) : Boolean
  8301.     
  8302.     Returns True if you are at the end of the file.
  8303.     
  8304.      Example:
  8305.        Var In
  8306.     
  8307.        FileAssign (In,'C:\NOTES\READ.ME')
  8308.        FileOpen (In)
  8309.        While not EndOfFile (In)
  8310.           Writeln (FileReadLn (In))
  8311.        EndWhile
  8312.        FileClose (In)
  8313.     
  8314.  
  8315.     Computer Tyme * MarxMenu * Users Manual                 Page #137
  8316.     -----------------------------------------------------------------
  8317.     
  8318.     Category: File
  8319.     
  8320.     
  8321.      EndProc
  8322.     
  8323.     Ends a Procedure.
  8324.     
  8325.     See Also: Procedure Return
  8326.     
  8327.     Category: Misc
  8328.     
  8329.     
  8330.      EndWhile
  8331.     
  8332.     Ends a While statement.
  8333.     
  8334.     See Also: While
  8335.     
  8336.     Category: Conditional
  8337.     
  8338.     
  8339.      EnvFree : Number
  8340.     
  8341.     Returns the free space in the selected environment.
  8342.     
  8343.      Example:
  8344.        if EnvFree
  8345.           Writeln "WARNING: Environment Memory Critically LOW!!!"
  8346.        endif
  8347.     
  8348.     See Also: EnvSize
  8349.     
  8350.     Category: Environment
  8351.     
  8352.     
  8353.      EnvSize : Number
  8354.     
  8355.     Returns the size of the selected environment.
  8356.     
  8357.      Example:
  8358.        if EnvSize < 20
  8359.           Writeln 'Your environment size is less than 20 bytes!!'
  8360.        endif
  8361.     
  8362.     See Also: EnvFree
  8363.     
  8364.     Category: Environment
  8365.     
  8366.  
  8367.     Computer Tyme * MarxMenu * Users Manual                 Page #138
  8368.     -----------------------------------------------------------------
  8369.     
  8370.      EraseTopWindow
  8371.     
  8372.     Erases the last window created with DrawBox.
  8373.     
  8374.     See Also: EraseWindow
  8375.     
  8376.     Category: Display
  8377.     
  8378.     
  8379.      EraseWindow (Number)
  8380.     
  8381.     Erases a window by number. This allows you to erase a window that is not
  8382.     the top window.
  8383.     
  8384.     See Also: CurrentWindow SetTopWindow EraseTopWindow
  8385.     
  8386.     Category: Display
  8387.     
  8388.     
  8389.      Execute ("command string")
  8390.     
  8391.     This allows you to execute a program without dropping out of MarxMenu.
  8392.     MarxMenu remains resident in memory and takes up approximately 50k. No
  8393.     batch file will be created by MarxMenu.
  8394.     
  8395.     This is handy if you have a small program you want to run from the menu
  8396.     but don't want to allow for the time required by MarxMenu to create and
  8397.     run a batch file. You can also execute some programs in a MarxMenu
  8398.     window (See Also: DosWindow). You can also execute a program and examine
  8399.     the return code.
  8400.     
  8401.     This command can be placed in a progression of menu commands without any
  8402.     special handling. Under an OnKey statement, you will need use a vertical
  8403.     bar in front of the command.
  8404.     
  8405.      Example:
  8406.        OnKey 'D'
  8407.         |UseCommand Off
  8408.         |Execute 'C:\DM.COM'  ;Note the COM extension is required here.
  8409.     
  8410.     Note: If UseCommand is True or On, MarxMenu will load COMMAND.COM to
  8411.     execute your command. If UseCommand is False, MarxMenu will execute your
  8412.     file directly without COMMAND.COM. Using COMMAND.COM will execute
  8413.     slightly slower, use 3.5k more RAM, and allow you to use command lines
  8414.     just like you would from the DOS prompt.
  8415.     
  8416.     If you set UseCommand to Off, you will have to include the COM or EXE
  8417.     extension in the name. If you don't include the extension, MarxMenu will
  8418.     automatically override UseCommand and load the command processor. If the
  8419.     command processor is loaded then you won't be able to read the
  8420.     errorlevel return code from the program you are running.
  8421.     
  8422.  
  8423.     Computer Tyme * MarxMenu * Users Manual                 Page #139
  8424.     -----------------------------------------------------------------
  8425.     
  8426.     MarxMenu will also use COMMAND.COM if you are piping or redirecting
  8427.     output to a file. COMMAND.COM is required when running internal DOS
  8428.     commands like COPY or DIR. It is also required to run batch files.
  8429.     
  8430.     When UseCommand is off, MarxMenu will search the PATH for the executable
  8431.     file if it isn't in the current directory.
  8432.     
  8433.     Not using COMMAND.COM allows you to use the ReturnCode variable to get
  8434.     the ERRORLEVEL from the subprogram. If COMMAND.COM is loaded, the
  8435.     ERRORLEVEL of the subprogram is lost.
  8436.     
  8437.     The ClearScreenFirst (On/Off) controls whether MarxMenu will clear the
  8438.     screen before you execute.
  8439.     
  8440.     The PauseAfterExecute (On/Off) allows you to have a pause like the Pause
  8441.     command in batch files. That way you can read the screen before it
  8442.     restores the MarxMenu screen. MarxMenu will display "Press any key to
  8443.     return to MarxMenu."
  8444.     
  8445.     By setting DosWindow to true MarxMenu will allow some programs to
  8446.     execute with the display going to a MarxMenu window. For this to work
  8447.     the program must output it's text to the standard output device.
  8448.     Programs that write directly to the screen won't work with DosWindow.
  8449.     
  8450.     Be sure not to load any TSR programs using the Execute command or
  8451.     MarxMenu will lock up.
  8452.     
  8453.     See Also: UseCommand DosWindow PauseAfterExecute ClearScreenFirst
  8454.     
  8455.     Category: Execution
  8456.     
  8457.     
  8458.      ExistDir (Directory) : Boolean
  8459.     
  8460.     Used to test whether or not a DIRECTORY exists. It can also test to see
  8461.     if a disk is inserted in a floppy drive or if a drive exists.
  8462.     
  8463.      Example:
  8464.        if not ExistDir 'A:' then Writeln 'Insert disk in drive A:'
  8465.     
  8466.     See Also: ExistFile
  8467.     
  8468.     Category: Directory
  8469.     
  8470.  
  8471.     Computer Tyme * MarxMenu * Users Manual                 Page #140
  8472.     -----------------------------------------------------------------
  8473.     
  8474.      ExistFile : Boolean
  8475.     
  8476.     Used to test whether or not a file or device exists.
  8477.     
  8478.      Example:
  8479.        ExistFile 'MARXMENU.EXE'
  8480.        ExistFile 'LPT2'            ;returns true if LPT2 device exists
  8481.     
  8482.     See Also: ExistDir
  8483.     
  8484.     Category: File
  8485.     
  8486.     
  8487.      ExistOnPath (String) : String
  8488.     
  8489.     Used to search the existing paths for the command to be executed by
  8490.     Execute or other function.
  8491.     
  8492.      Example:
  8493.        OnKey 'D'
  8494.        |Execute(ExistOnPath('DM.COM'))
  8495.     
  8496.     If the file is not found, a null string is returned.
  8497.     
  8498.     Category: File
  8499.     
  8500.     
  8501.      ExitCode
  8502.     
  8503.     This can be set so MarxMenu will return an ErrorLevel that can be used
  8504.     in a batch file.
  8505.     
  8506.      Example:
  8507.         ExitCode = 100
  8508.     
  8509.     When MarxMenu exits it will use ErrorLevel 100.
  8510.     
  8511.     Category: Execution
  8512.     
  8513.     
  8514.      ExitMenu
  8515.     
  8516.     Causes MarxMenu to exit. If the Bat command is used or batch commands
  8517.     are used under an OnKey statement then MarxMenu will create a batch file
  8518.     and set the environment variable MXCMD to point to it. If no batch file
  8519.     is to be created, and MXCMD hasn't been set to any value then the menu
  8520.     system will exit by setting MXCMD to MXSTOP.
  8521.     
  8522.     Category: Execution
  8523.     
  8524.  
  8525.     Computer Tyme * MarxMenu * Users Manual                 Page #141
  8526.     -----------------------------------------------------------------
  8527.     
  8528.      Exp (Real) : Real
  8529.     
  8530.     Returns the Exponential of a real. Inverse of Ln.
  8531.     
  8532.     Category: Math Float
  8533.     
  8534.     
  8535.      Explode (On/Off)
  8536.     
  8537.     Turn exploding windows On/Off.
  8538.     
  8539.      Example:
  8540.        Explode Off                 ;Box just appears!
  8541.        DrawBox 1 1 10 15
  8542.        Explode On                  ;Box grows on screen.
  8543.        Drawbox 20 1 10 15
  8544.     
  8545.     Category: Display
  8546.     
  8547.     
  8548.      ExplodeDelay (Number)
  8549.     
  8550.     Sets the speed of exploding windows. Use this command to adjust the
  8551.     speed of the exploding windows. Default is 15.
  8552.     
  8553.     Category: Display
  8554.     
  8555.     
  8556.      Extension (String) : String
  8557.     
  8558.     Returns the Extension of a file name or sets the Extension.
  8559.     
  8560.      Example:
  8561.        Writeln Extension 'MARXMENU.EXE'  ;returns 'EXE'
  8562.     
  8563.      Example:
  8564.        var FileName
  8565.          FileName = 'TEST.MNU'
  8566.          Extension (FileName) = 'MRX'
  8567.          Writeln FileName        ;this returns 'TEST.MRX'
  8568.     
  8569.     See Also: NamePart PathPart FilePart
  8570.     
  8571.     Category: String
  8572.     
  8573.     
  8574.      FileAppend (FileVar)
  8575.     
  8576.     Opens a file for access and moves the file pointer to the end of the
  8577.     file. File writes will start at the end of the file.
  8578.     
  8579.      Example:
  8580.        var LogFileName
  8581.     
  8582.  
  8583.     Computer Tyme * MarxMenu * Users Manual                 Page #142
  8584.     -----------------------------------------------------------------
  8585.     
  8586.        FileAssign(LogFileName,'USER.LOG')  ; Assign a filename
  8587.        FileAppend(LogFileName)             ; Use FileAppend move to EOF
  8588.        FileWriteLn(LogFileName,"This is a test") ;Write to file
  8589.        FileClose(LogFileName)              ;Close File
  8590.     
  8591.     See Also: FileOpen
  8592.     
  8593.     Category: File
  8594.     
  8595.     
  8596.      FileAssign (FileVar,String)
  8597.     
  8598.     Assigns a file variable to a file name. Files must be given a name
  8599.     before they can be accessed.
  8600.     
  8601.      Example:
  8602.        FileAssign(BatFile,'MARX.BAT')
  8603.     
  8604.     BatFile is a variable and after the FileAssign, it becomes a file
  8605.     variable. All access to the file must be done using the file variable.
  8606.     
  8607.     If an empty string is passed as the filename, MarxMenu will use the
  8608.     standard console file handles.
  8609.     
  8610.     See Also: FileOpen
  8611.     
  8612.     Category: File
  8613.     
  8614.     
  8615.      FileAttr (String) : Number
  8616.     
  8617.     Returns the attribute of a file or directory.
  8618.     
  8619.      Example:
  8620.        ; ATTRDISP.MNU
  8621.        ; ATTRIBUTE BYTE DISPLAY PROGRAM
  8622.        ; Using the FileAttr command. USAGE: "MARXMENU ATTRDISP Filename"
  8623.        var temp
  8624.        temp=binstring(fileattr(cmdline),8)
  8625.        writeln "Menu FileName: " + cmdline + "       " + temp
  8626.        writeln " "
  8627.        if mid(temp,8,1)="1" then writeln "READ-ONLY FLAG SET"
  8628.        if mid(temp,7,1)="1" then writeln "HIDDEN FLAG SET"
  8629.        if mid(temp,6,1)="1" then writeln "SYSTEM FLAG SET"
  8630.        if mid(temp,3,1)="1" then writeln "ARCHIVE BIT SET"
  8631.     
  8632.     Category: File
  8633.     
  8634.  
  8635.     Computer Tyme * MarxMenu * Users Manual                 Page #143
  8636.     -----------------------------------------------------------------
  8637.     
  8638.      FileClose (FileVar)
  8639.     
  8640.     Closes a file and deallocates the memory space used by the file
  8641.     variable.
  8642.     
  8643.     See Also: FileOpen FileAssign
  8644.     
  8645.     Category: File
  8646.     
  8647.     
  8648.      FileCreate (FileVar)
  8649.     
  8650.     Creates a new file. If the file exists, it overwrites the old one.
  8651.     FileCreate opens the file for output. Do not use FileOpen with
  8652.     FileCreate.
  8653.     
  8654.     See Also: FileWriteln FileAssign
  8655.     
  8656.     Category: File
  8657.     
  8658.     
  8659.      FileDate (String) : Number
  8660.     
  8661.     Returns file date as 32 bit integer. See DOS manual for date structure.
  8662.     This function should not be confused with FileTime which is compatible
  8663.     with all other MarxMenu time commands.
  8664.     
  8665.     See Also: FileTime
  8666.     
  8667.     Category: File
  8668.     
  8669.     
  8670.      FileFlush (FileVar)
  8671.     
  8672.     Writes any information that is in the file buffers to disk.
  8673.     
  8674.     See Also: FileWriteln FileAssign
  8675.     
  8676.     Category: File
  8677.     
  8678.     
  8679.      FileLog (FileName,String)
  8680.     
  8681.     FileLog opens the file if it exists, or creates it if it doesn't exist.
  8682.     It then seeks to the end of the file and writes the string to the end.
  8683.     The file is then closed. FileLog is typically used for things such as
  8684.     usage tracking.
  8685.     
  8686.      Example:
  8687.         FileLog('USAGE.LOG','Add This Line!')
  8688.     
  8689.     Category: File
  8690.     
  8691.  
  8692.     Computer Tyme * MarxMenu * Users Manual                 Page #144
  8693.     -----------------------------------------------------------------
  8694.     
  8695.      FileOpen (FileVar)
  8696.     
  8697.     Opens a file for access. FileOpen is not needed if you are using the
  8698.     ReadTextFile command. The following example copies a text file.
  8699.     
  8700.        var Inp Out St
  8701.     
  8702.        FileAssign(Inp,'INPUT.TXT')
  8703.        FileOpen(Inp)
  8704.        FileAssign(Out,'OUTPUT.TXT')
  8705.        FileCreate(Out)
  8706.        while not EndOfFile(Inp)
  8707.           St = FileReadln(Inp)
  8708.           FileWriteln(Out,St)
  8709.        endwhile
  8710.        FileClose(Inp)
  8711.        FileClose(Out)
  8712.     
  8713.     Category: File
  8714.     
  8715.     
  8716.      FilePart (String) : String
  8717.     
  8718.     Returns the file part of a filename.
  8719.     
  8720.      Example:
  8721.        NamePart ('C:\MARX\MARXMENU.EXE') ;returns MARXMENU.EXE
  8722.     
  8723.     See Also: Extension PathPart NamePart
  8724.     
  8725.     Category: String
  8726.     
  8727.     
  8728.      FilePos (FileVar) : Number
  8729.     
  8730.     Returns the current file position in bytes of where you are in a file
  8731.     that you are reading or writing. You can get back to the same place in
  8732.     the file by using FileSeek.
  8733.     
  8734.     See Also: FileSeek
  8735.     
  8736.     Category: File
  8737.     
  8738.     
  8739.      FileReadln (FileVar) : String
  8740.     
  8741.     Reads one line of an open file returning that line as a string.
  8742.     
  8743.      Example:
  8744.        Line3 = FileReadln(BatFile)
  8745.     
  8746.  
  8747.     Computer Tyme * MarxMenu * Users Manual                 Page #145
  8748.     -----------------------------------------------------------------
  8749.     
  8750.     See Also: FileOpen
  8751.     
  8752.     Category: File
  8753.     
  8754.     
  8755.      FileRename (Old,New)
  8756.     
  8757.     Renames a file from old name to new. A file may be moved to a new
  8758.     directory with this command.
  8759.     
  8760.      Example:
  8761.        FileRename ('F:\HOME\MARC\MESSAGE.TXT','F:\HOME\VICKI\MESSAGE.TXT')
  8762.     
  8763.     Category: File
  8764.     
  8765.     
  8766.      FileResult : Number
  8767.     
  8768.     Returns result code from last file IO. Result codes are the same as
  8769.     Turbo Pascal IOResult codes. These codes usually match the errors
  8770.     returned in the AX register of DOS commands. 0 indicates no problem.
  8771.     
  8772.      Example:
  8773.        DelFile 'TEST.TXT'
  8774.        if FileResult = 5 then Writeln 'ACCESS DENIED!'
  8775.     
  8776.     Category: File
  8777.     
  8778.     
  8779.      FileSeek (FileVar,Number)
  8780.     
  8781.     Moves the file pointer to a specified place in the file. This allows you
  8782.     to set the next place in a file that FileReadln will read from.
  8783.     
  8784.     See Also: FilePos FileReadln
  8785.     
  8786.     Category: File
  8787.     
  8788.     
  8789.      FileSize (String) : Number
  8790.     
  8791.     Returns size of file in bytes.
  8792.     
  8793.      Example:
  8794.        FileSize 'CONFIG.SYS'
  8795.     
  8796.     Category: File
  8797.     
  8798.  
  8799.     Computer Tyme * MarxMenu * Users Manual                 Page #146
  8800.     -----------------------------------------------------------------
  8801.     
  8802.      FileTime (File) : Time
  8803.     
  8804.     Returns the time of a file in MarxMenu format. This should not be
  8805.     confused with FileDate that returns the file time on DOS binary format.
  8806.     
  8807.     Category: File Time
  8808.     
  8809.     
  8810.      FileWrite (FileVar,String)
  8811.     
  8812.     Writes text to a file without a carriage return or line feed.
  8813.     
  8814.      Example:
  8815.        FileWrite (Out,Char(12))   ;writes a FormFeed to the file Out
  8816.     
  8817.     See Also: FileOpen
  8818.     
  8819.     Category: File
  8820.     
  8821.     
  8822.      FileWriteln (FileVar,String)
  8823.     
  8824.     Writes text to a file with a carriage return and a line feed.
  8825.     
  8826.      Example:
  8827.        FileWriteln (Out,'This Line')
  8828.     
  8829.     See Also: FileOpen
  8830.     
  8831.     Category: File
  8832.     
  8833.     
  8834.      FixPath
  8835.     
  8836.     This command reads your path command and verifies that all the paths are
  8837.     accessible. Any path that isn't accessible is removed from the master
  8838.     environment. This can be used on network drives to eliminate searching
  8839.     paths on fileservers that are no longer accessible.
  8840.     
  8841.     Category: Environment
  8842.     
  8843.     
  8844.      Floppies : Number
  8845.     
  8846.     Returns number of floppy drives in your computer.
  8847.     
  8848.     Category: System
  8849.     
  8850.  
  8851.     Computer Tyme * MarxMenu * Users Manual                 Page #147
  8852.     -----------------------------------------------------------------
  8853.     
  8854.      ForceExplosion (On/Off)
  8855.     
  8856.     This changes the explosion status of a window that already exists. This
  8857.     allows windows to implode that didn't explode.
  8858.     
  8859.     Category: Display
  8860.     
  8861.     
  8862.      ForceExtension (String,Ext) : String
  8863.     
  8864.     This command forces a file extension on a string.
  8865.     
  8866.      Example:
  8867.        St = ForceExtension('MAIN.MNU','MRX')
  8868.     
  8869.     This sets St equal to MAIN.MRX
  8870.     
  8871.     Category: String
  8872.     
  8873.     
  8874.      Fraction (Real) : Real
  8875.     
  8876.     Returns the fractional part of a real.
  8877.     
  8878.      Example:
  8879.        Fraction (2.36)   ;returns .36
  8880.     
  8881.     Category: Math Float
  8882.     
  8883.     
  8884.      FreeDiskSpace (Drive) : Number
  8885.     
  8886.     Returns free disk space in bytes.
  8887.     
  8888.      Example:
  8889.        Writeln (FreeDiskSpace 'C')
  8890.     
  8891.     FreeDiskSpace only looks at the first character of the string for the
  8892.     drive letter.
  8893.     
  8894.     Category: System
  8895.     
  8896.     
  8897.      FreeEMS : Number
  8898.     
  8899.     Returns free EMS memory in bytes.
  8900.     
  8901.     Category: Memory
  8902.     
  8903.  
  8904.     Computer Tyme * MarxMenu * Users Manual                 Page #148
  8905.     -----------------------------------------------------------------
  8906.     
  8907.      FreeMem(Segment)
  8908.     
  8909.     FreeMem deallocates memory that was allocated with GetMem. FreeMem
  8910.     automatically knows how much memory to deallocate.
  8911.     
  8912.     See Also: GetMem
  8913.     
  8914.     Category: Memory
  8915.     
  8916.     
  8917.      FreeMemory : Number
  8918.     
  8919.     Returns the amount of free memory still available. This is the memory
  8920.     available to MarxMenu or the amount you would have using the Execute
  8921.     command.
  8922.     
  8923.     See Also: ApplicationMemory
  8924.     
  8925.     Category: Memory
  8926.     
  8927.     
  8928.      FullLineReturn (On/Off)
  8929.     
  8930.     The FullLineReturn command is a control parameter affecting the Readln
  8931.     command. When set to On, subsequent Readlns will auto-force a carriage
  8932.     return when a user reaches the last character of the input field.
  8933.     
  8934.     See Also: Readln
  8935.     
  8936.     Category: String
  8937.     
  8938.     
  8939.      GetMem (Number) : Segment
  8940.     
  8941.     GetMem allocates the amount of memory specified in Number and returns
  8942.     the memory segment where the memory was allocated. The memory segment is
  8943.     filled with 0s. The maximum size of the memory block is 65504 bytes.
  8944.     
  8945.     You can then read and write to this memory area using the Mem commands.
  8946.     
  8947.      Example:
  8948.        var RamBlock
  8949.        RamBlock = GetMem(2000)  ;allocate 2000 bytes of memory
  8950.        Mem(RamBlock,0) = 5      ;writes the number 5 to the first byte
  8951.     
  8952.     See Also: FreeMem
  8953.     
  8954.     Category: Memory
  8955.     
  8956.  
  8957.     Computer Tyme * MarxMenu * Users Manual                 Page #149
  8958.     -----------------------------------------------------------------
  8959.     
  8960.      GotoXY (Column,Row)
  8961.     
  8962.     Move cursor to location column,row in current box.
  8963.     
  8964.      Example:
  8965.        GotoXY 35 9
  8966.     
  8967.     Category: Display Ansi
  8968.     
  8969.     
  8970.      HexString (Number, Length) : String
  8971.     
  8972.     HexString converts a number into a base 16 hexadecimal string. If Length
  8973.     > 0 then the number will have enough leading zeros to make it Length
  8974.     long. If Length = 0 then leading zeros are removed. Length must be 8 or
  8975.     less.
  8976.     
  8977.      Example:
  8978.        Writeln HexString(253,4)   ;returns 00FD
  8979.        Writeln HexString(253,0)   ;returns FD
  8980.     
  8981.     See Also: BinString
  8982.     
  8983.     Category: String
  8984.     
  8985.     
  8986.      HiddenAndSystem (On/Off)
  8987.     
  8988.     Controls if ReadDirectory will read hidden and system files.
  8989.     
  8990.     See Also: ReadDirectory
  8991.     
  8992.     Category: File Directory
  8993.     
  8994.     
  8995.      HighWord (Number) : Number
  8996.     
  8997.     Returns the value of the upper 16 bits of a number.
  8998.     
  8999.     See Also: LowWord
  9000.     
  9001.     Category: Math
  9002.     
  9003.     
  9004.      Hour : Number
  9005.     
  9006.     Return the current hour. 24 hour format.
  9007.     
  9008.     Category: Time
  9009.     
  9010.  
  9011.     Computer Tyme * MarxMenu * Users Manual                 Page #150
  9012.     -----------------------------------------------------------------
  9013.     
  9014.      HourOf (Date) : Number
  9015.     
  9016.     Returns the hour of a date. If Date is passed as a string it is
  9017.     converted automatically.
  9018.     
  9019.      Example:
  9020.        HourOf '6:00 pm'  ;returns 18
  9021.     
  9022.     See Also: TimeOf BadDate
  9023.     
  9024.     Category: Time
  9025.     
  9026.     
  9027.      Hundredth : Number
  9028.     
  9029.     Returns the 1/100 of a second from the system clock. Note that the
  9030.     system clock timer tick is 1/18 second so don't expect a lot of accuracy
  9031.     here.
  9032.     
  9033.     Category: Time
  9034.     
  9035.     
  9036.      IdleProgram : Procedure
  9037.     
  9038.     IdleProgram is a variable that when set to the location of a procedure
  9039.     allows the procedure to run while waiting at the keyboard. This is done
  9040.     by writing a procedure that will run while waiting for input.
  9041.     
  9042.     The way you use this is to set an internal variable named IdleProgram to
  9043.     the Loc of the procedure you want to run as follows:
  9044.     
  9045.      Example:
  9046.        IdleProgram = Loc MyProcedure
  9047.     
  9048.     Note: Do not use parentheses around MyProcedure.
  9049.     
  9050.     When writing MyProcedure make it as short and quick as possible. As of
  9051.     now, MyProcedure is called continuously while there is no keyboard
  9052.     input. You can also use a loop in it as follows.
  9053.     
  9054.      Procedure MyProcedure
  9055.         SetItUp
  9056.         while not KBDReady
  9057.            {do your thing}
  9058.         endwhile
  9059.         PutItBack
  9060.      EndProc
  9061.     
  9062.     MarxMenu doesn't automatically exit your procedure or save and restore
  9063.     anything. If you're writing to the screen you have to put everything
  9064.     back the way it was.
  9065.     
  9066.  
  9067.     Computer Tyme * MarxMenu * Users Manual                 Page #151
  9068.     -----------------------------------------------------------------
  9069.     
  9070.     If you want to run a program at a specific time, here's how it can be
  9071.     done:
  9072.     
  9073.      Procedure MyProcedure
  9074.         if Now = TimeOf('11:00pm')
  9075.            Bat 'NIGHT'             ;run NIGHT.BAT
  9076.            ExitMenu
  9077.         endif
  9078.         if Now = TimeOf('5:00')
  9079.            Bat 'MORNING'           ;run MORNING.BAT
  9080.            ExitMenu
  9081.         endif
  9082.      EndProc
  9083.     
  9084.     To disable IdleProgram run:
  9085.     
  9086.       Dispose(IdleProgram)
  9087.     
  9088.     See Also: Run Loc BlankScreenProgram
  9089.     
  9090.     Category: Execution
  9091.     
  9092.     
  9093.      If
  9094.     
  9095.     Used for conditional program control.
  9096.     
  9097.      Usage:
  9098.     
  9099.      IF (condition) THEN (statement)
  9100.     
  9101.      IF (condition)
  9102.         (statement)
  9103.         (statement)
  9104.     
  9105.      ELSEIF (condition)
  9106.         (statement)
  9107.         (statement)
  9108.     
  9109.      ELSE
  9110.         (statement)
  9111.         (statement)
  9112.     
  9113.      ENDIF
  9114.     
  9115.     Category: Conditional
  9116.     
  9117.     See Also: Else ElseIf Then EndIf
  9118.     
  9119.  
  9120.     Computer Tyme * MarxMenu * Users Manual                 Page #152
  9121.     -----------------------------------------------------------------
  9122.     
  9123.      InactiveBox (BoxType)
  9124.     
  9125.     This is used to select the type of box border to use when a window is
  9126.     not the current window. If any inactive box type is specified, then when
  9127.     you execute another DrawBox, the old window's border changes to the
  9128.     inactive box type. The inactive window also loses its headers and
  9129.     shadows.
  9130.     
  9131.     Note that InActiveBox must be used BEFORE the DrawBox command.
  9132.     
  9133.      Example:
  9134.        InActiveBox (SingleLineBox) ;switches to single line box if
  9135.                                     inactive.
  9136.     
  9137.        InactiveBox (NoBoxBorder)   ;disables InActive effect.
  9138.     
  9139.     See Also: InactiveBoxColor InactiveShadow
  9140.     
  9141.     Category: Display
  9142.     
  9143.     
  9144.      InactiveBoxColor (Foreground,Background)
  9145.     
  9146.     Selects the color of the inactive box window. If Black on Black is
  9147.     selected, (default), the inactive box color is the same as the active
  9148.     box color.
  9149.     
  9150.      Example:
  9151.        BoxBorderColor Yellow Blue
  9152.        InActiveBoxColor Brown Blue
  9153.     
  9154.     See Also: InactiveBox InactiveShadow
  9155.     
  9156.     Category: Color
  9157.     
  9158.     
  9159.      InactiveShadow (On/Off)
  9160.     
  9161.     When InactiveShadow is set to Off, the window shadow disappears when
  9162.     then window is not the top window.
  9163.     
  9164.     See Also: InactiveBox InactiveBoxColor
  9165.     
  9166.     Category: Display
  9167.     
  9168.  
  9169.     Computer Tyme * MarxMenu * Users Manual                 Page #153
  9170.     -----------------------------------------------------------------
  9171.     
  9172.      Include (MenuName)
  9173.     
  9174.     This is used to insert the menu code from another file into the menu
  9175.     that you are compiling.
  9176.     
  9177.      Example:
  9178.        Include 'DOS.MNU'
  9179.     
  9180.     This will compile DOS.MNU into your present menu as if that whole file
  9181.     were part of the menu you are working on.
  9182.     
  9183.     This is useful if you have several menus that share common code. By
  9184.     moving this common code to a separate file, and using an Include
  9185.     statement, you can change the common code and update several menus at
  9186.     once. If you are using overlays, it is a good idea to put your shared
  9187.     variables in an Include file. This assures that the shared variables
  9188.     will be the same for all overlays.
  9189.     
  9190.     Changing an Include file does not cause MarxMenu to recompile
  9191.     automatically like changing the MNU does. You will have to force it to
  9192.     compile your menus.
  9193.     
  9194.     This can be done several ways. You can type MARXCOMP (menu) or you can
  9195.     just type DEL *.MRX which will cause all the menus to recompile the next
  9196.     time they are run.
  9197.     
  9198.     Category: Misc
  9199.     
  9200.     
  9201.      IncludeDirectories (On/Off)
  9202.     
  9203.     Controls if ReadDirectory will read directories along with file names.
  9204.     Please note that the Parent Directory [..] will not be shown.
  9205.     
  9206.      Example:
  9207.        Var X
  9208.        IncludeDirectories On
  9209.        DirectoriesOnly on
  9210.        ReadDirectory('*.*',X)
  9211.     
  9212.     See Also: ReadDirectory
  9213.     
  9214.     Category: Directory
  9215.     
  9216.  
  9217.     Computer Tyme * MarxMenu * Users Manual                 Page #154
  9218.     -----------------------------------------------------------------
  9219.     
  9220.      InFile : String
  9221.     
  9222.     When using StandardIO the input and output files by default use the
  9223.     console. The input can be overridden by setting InFile to point to a
  9224.     different file or device.
  9225.     
  9226.      Example:
  9227.        InFile = 'INPUT.TXT'
  9228.        StandardIO
  9229.     
  9230.     See Also: OutFile StandardIO
  9231.     
  9232.     Category: File
  9233.     
  9234.     
  9235.      InMem (TsrName) : Boolean
  9236.     
  9237.     Inmem returns true if the TSR you are looking for is loaded. This allow
  9238.     you to do conditionals based on the presence or absence of a TSR. It
  9239.     will also check for the names of pending batch files.
  9240.     
  9241.      Example:
  9242.        if not InMem('BTRIEVE')
  9243.           Bat 'BTRIEVE.EXE'
  9244.        endif
  9245.     
  9246.     See Also: MemoryLoc
  9247.     
  9248.     Category: Memory
  9249.     
  9250.     
  9251.      InputBlankChar
  9252.     
  9253.     InputBlankChar is used with Readln to display the input string area for
  9254.     entering information into a string. By default it is set to a space
  9255.     character but can be set to an underline or other characters to make the
  9256.     field size visible.
  9257.     
  9258.      Example:
  9259.        InputBlankChar = '_'  ;underline
  9260.        InputLength = 10
  9261.        Write 'Enter Postal Code: '
  9262.        ZipCode = Readln
  9263.     
  9264.     See Also: Readln
  9265.     
  9266.     Category: String
  9267.     
  9268.  
  9269.     Computer Tyme * MarxMenu * Users Manual                 Page #155
  9270.     -----------------------------------------------------------------
  9271.     
  9272.      InputLength
  9273.     
  9274.     When using Readln to get input from the keyboard, MarxMenu normally
  9275.     accepts data from the cursor to the edge of the current window. By
  9276.     setting InputLength to a value, MarxMenu will limit the size of the data
  9277.     to a specific length.
  9278.     
  9279.      Example:
  9280.        InputLength = 10
  9281.        Write 'Enter Postal Code: '
  9282.        ZipCode = Readln
  9283.     
  9284.     InputLength is reset to 0 after each Readln.
  9285.     
  9286.     See Also: Readln
  9287.     
  9288.     Category: String
  9289.     
  9290.     
  9291.      InputString (String)
  9292.     
  9293.     Preloads a string for the Readln command. The next Readln will have the
  9294.     InputString on the screen for you to edit or accept. Once Readln
  9295.     executes, InputString is cleared to a blank string.
  9296.     
  9297.      Example:
  9298.        InputString = ReadEnv('USERNAME')
  9299.        YourName = Readln
  9300.     
  9301.     See Also: Readln
  9302.     
  9303.     Category: String
  9304.     
  9305.     
  9306.      Insert (InsString,OrigString,Pos)
  9307.     
  9308.     Inserts a string into a string.
  9309.     
  9310.      Example:
  9311.        St = 'ABCDEF'
  9312.        Insert('123',St,4)
  9313.     
  9314.     St will become 'ABC123DEF'
  9315.     
  9316.     Category: String
  9317.     
  9318.  
  9319.     Computer Tyme * MarxMenu * Users Manual                 Page #156
  9320.     -----------------------------------------------------------------
  9321.     
  9322.      InsertMode (On/Off)
  9323.     
  9324.     Turns insert mode On and Off for Readln commands.
  9325.     
  9326.     See Also: Readln
  9327.     
  9328.     Category: Keyboard
  9329.     
  9330.     
  9331.      Int (Real) : Real
  9332.     
  9333.     Returns the integer part of a real as a real.
  9334.     
  9335.      Example:
  9336.        Int(2.36)  ;returns 2.0
  9337.     
  9338.     Category: Math Float
  9339.     
  9340.     
  9341.      Integer (Real) : Number
  9342.     
  9343.     Returns the integer part of a real as an integer. The fractional part is
  9344.     truncated.
  9345.     
  9346.      Example:
  9347.        Int(2.36)  ;returns 2
  9348.     
  9349.     Category: Math Float
  9350.     
  9351.     
  9352.      Intr (Interrupt,Registers)
  9353.     
  9354.     Intr works just like MS-DOS except that it lets you choose which
  9355.     interrupt you want to call. See MS-DOS manual for Details.
  9356.     
  9357.     See Also: MS-DOS
  9358.     
  9359.     Category: System
  9360.     
  9361.     
  9362.      InverseColor (Foreground,Background)
  9363.     
  9364.     Sets colors for inverse bar used with UseArrows command.
  9365.     
  9366.      Example:
  9367.        InverseColor Yellow Mag
  9368.     
  9369.     Category: Color
  9370.     
  9371.  
  9372.     Computer Tyme * MarxMenu * Users Manual                 Page #157
  9373.     -----------------------------------------------------------------
  9374.     
  9375.      InvertString (String)
  9376.     
  9377.     InvertString turns a string around so that characters are in reverse
  9378.     order. This allows for correct string compares and sorts in Hebrew and
  9379.     Arabic and other languages that are read from right to left.
  9380.     
  9381.      Example:
  9382.        var St
  9383.        St = 'ABCDE'
  9384.        InvertString(St)
  9385.        Writeln St        ;Returns 'EDCBA'
  9386.     
  9387.     Category: String
  9388.     
  9389.     
  9390.      IpxLoaded : Boolean
  9391.     
  9392.     Returns True if IPX is loaded
  9393.     
  9394.     Category: Novell
  9395.     
  9396.     
  9397.      Jump (Menu)
  9398.     
  9399.     Jumps to another menu and does not return to original menu.
  9400.     
  9401.      Example:
  9402.        Jump 'MYMENU'
  9403.     
  9404.     See Also: Chain
  9405.     
  9406.     Category: Execution
  9407.     
  9408.     
  9409.      KbdReady : Boolean
  9410.     
  9411.     Returns true if a Key has been pressed.
  9412.     
  9413.     See Also: ReadKey
  9414.     
  9415.     Category: Keyboard
  9416.     
  9417.     
  9418.      KeyEvent (Key) : Procedure
  9419.     
  9420.     KeyEvent allows you to assign a procedure to a key so that any time the
  9421.     key is pressed the procedure is called. Setting a key to Nil clears the
  9422.     key. This command can be used to create global OnKey.
  9423.     
  9424.      Example:
  9425.         KeyEvent(F1) = loc ShowHelp   ;runs ShowHelp when F1 is pressed
  9426.         KeyEvent(F1) = Nil            ;clears F1 key
  9427.         Run KeyEvent(F1)              ;executes procedure assigned to F1
  9428.     
  9429.  
  9430.     Computer Tyme * MarxMenu * Users Manual                 Page #158
  9431.     -----------------------------------------------------------------
  9432.     
  9433.     KeyEvents are attached to the current window. New windows inherit the
  9434.     KeyEvents from their parent window. But if you create a new KeyEvent in
  9435.     a window and then erase that window the new KeyEvent is erased and the
  9436.     KeyEvents of the parent window are restored. You can have completely
  9437.     different KeyEvents for each window and those events become active
  9438.     whenever the window becomes active.
  9439.     
  9440.     See Also: ClearKeyEvents
  9441.     
  9442.     Category: Execution Event
  9443.     
  9444.     
  9445.      KeyFromMouse : Boolean
  9446.     
  9447.     Normally mouse activity is translated into keystrokes. This variable is
  9448.     set to true if the keystroke came from the mouse.
  9449.     
  9450.     See Also: KbdReady ReadKey
  9451.     
  9452.     Category: MouseControl
  9453.     
  9454.     
  9455.      KeySave : String
  9456.     
  9457.     Stores your keystrokes that you pressed to get to the menu level where
  9458.     you are at. KeySave is passed to DOS using the SET KSV= command to store
  9459.     your position in the menu system. To make this work, you must execute
  9460.     SavePosition On.
  9461.     
  9462.     This variable can be set by you to force MarxMenu to return to a place
  9463.     in the menu other than where you are. This allows MarxMenu to suggest a
  9464.     next step.
  9465.     
  9466.     See Also: SavePosition
  9467.     
  9468.     Category: String Environment Execution
  9469.     
  9470.     
  9471.      KillMusic
  9472.     
  9473.     This command stops the music and de-allocates the memory used by the
  9474.     music buffer.
  9475.     
  9476.     Category: Music
  9477.     
  9478.     
  9479.      LastDrive : String
  9480.     
  9481.     Returns the drive letter of the last local drive in the system as set by
  9482.     CONFIG.SYS. By default, this is drive letter E. On a Novell network the
  9483.     drive after LastDrive is the first network drive.
  9484.     
  9485.  
  9486.     Computer Tyme * MarxMenu * Users Manual                 Page #159
  9487.     -----------------------------------------------------------------
  9488.     
  9489.     Category: Novell System
  9490.     
  9491.     
  9492.      LastKey : String
  9493.     
  9494.     LastKey returns the last key that was typed at the keyboard. This can be
  9495.     used after a Readln to determine if the ESC key was pressed or perhaps
  9496.     the up or down arrow keys.
  9497.     
  9498.     Sometimes after the press of an ESC key, MarxMenu wants to exit more
  9499.     levels than you want it to. This can be controlled by setting LastKey =
  9500.     ' ' to stop the abort process.
  9501.     
  9502.     See Also: Readln OnKey
  9503.     
  9504.     Category: String
  9505.     
  9506.     
  9507.      Left (String,Count) : String
  9508.     
  9509.     Returns string starting at the beginning for count characters.
  9510.     
  9511.      Example:
  9512.        Left('ABCDEF',3)   ;returns 'ABC'
  9513.     
  9514.     Category: String
  9515.     
  9516.     
  9517.      Length (String) : Number
  9518.     
  9519.     Returns the length of the string or sets the length of a string.
  9520.     
  9521.      Example:
  9522.        Length('ABCD') returns 4.
  9523.     
  9524.      Example:
  9525.        var St
  9526.          St = '123456'
  9527.          Length(St) = 3
  9528.          Writeln St      ;this produces '123'
  9529.     
  9530.     If you set the length longer than the original string the string is
  9531.     padded with blanks on the end.
  9532.     
  9533.     Category: String
  9534.     
  9535.  
  9536.     Computer Tyme * MarxMenu * Users Manual                 Page #160
  9537.     -----------------------------------------------------------------
  9538.     
  9539.      Ln (Real) : Real
  9540.     
  9541.     Returns the Natural Logarithm of a real.
  9542.     
  9543.      Example:
  9544.        Exp(Ln(5) * 3) = 125
  9545.     
  9546.     See Also: Exp
  9547.     
  9548.     Category: Math Float
  9549.     
  9550.     
  9551.      Loc (Procedure or Variable)
  9552.     
  9553.     When used with a procedure, Loc returns the location of a procedure for
  9554.     storing in a variable. The variable is later executed using the Run
  9555.     command.
  9556.     
  9557.     When used with a variable, Loc returns the location of a variable rather
  9558.     than it's contents. Thus B = Loc A sets B to point to A.
  9559.     
  9560.      Example:
  9561.        Var A B
  9562.           B = Loc A
  9563.           B = 9
  9564.           Writeln A  ;returns 9
  9565.     
  9566.      Example:
  9567.        Var A
  9568.     
  9569.      TestLoc (Loc A)
  9570.      Writeln A ;returns 9
  9571.     
  9572.      Procedure TestLoc (B)
  9573.         B = 9
  9574.      EndProc
  9575.     
  9576.     The rule is that all indirect location references are resolved in the
  9577.     process of evaluating an expression.
  9578.     
  9579.      Example:
  9580.        Var A B C D
  9581.           B = Loc A
  9582.           C = Loc B
  9583.           D = Loc C
  9584.           D = 9
  9585.           Writeln A   ; Returns 9
  9586.     
  9587.     As you would expect, qualifiers and multidimensional array addressing
  9588.     works with indirect addressing.
  9589.     
  9590.  
  9591.     Computer Tyme * MarxMenu * Users Manual                 Page #161
  9592.     -----------------------------------------------------------------
  9593.     
  9594.      Example:
  9595.        var A B C D E
  9596.     
  9597.        A[3] = 12
  9598.        C = 3
  9599.        B = Loc C
  9600.     
  9601.        D = Loc E
  9602.        D[7] = 8
  9603.     
  9604.        TestLoc (Loc A[B])
  9605.        Writeln A[B,9,E[7]]
  9606.     
  9607.        Procedure TestLoc (X)
  9608.           Writeln X
  9609.           X[9,D[7]] = 6
  9610.           Writeln X[9,E[7]]
  9611.        EndProc
  9612.     
  9613.     See Also: Run Actual
  9614.     
  9615.     Category: Variable
  9616.     
  9617.     
  9618.      Local : Array
  9619.     
  9620.     Parameters passed to procedures and local variables in a procedure are
  9621.     elements of an array of local variables. By using the word Local you can
  9622.     address passed parameters and local variables as if they were elements
  9623.     of an array.
  9624.     
  9625.      Example:
  9626.        Procedure Test (A,B)
  9627.        var C,D
  9628.           Writeln A B C D
  9629.        EndProc
  9630.     
  9631.     In the above example the variable A is the same as Local[1], B is
  9632.     Local[2], C is Local[3], and D is Local[4]. The Local command can be
  9633.     used to pass a varying number of parameters to a procedure as follows:
  9634.     
  9635.      Example:
  9636.        Procedure Test
  9637.           Loop Local
  9638.              Writeln Local[LoopIndex]
  9639.           endloop
  9640.        EndProc
  9641.     
  9642.        Test (1,2,3,4)
  9643.     
  9644.  
  9645.     Computer Tyme * MarxMenu * Users Manual                 Page #162
  9646.     -----------------------------------------------------------------
  9647.     
  9648.     This allows the procedure Test to accept and process any number of
  9649.     parameters you wish to pass to it.
  9650.     
  9651.     Category: Array
  9652.     
  9653.     
  9654.      LockWord (word)
  9655.     
  9656.     Sets a default word for the console activated keyboard lock. When the
  9657.     screen goes blank, the user has to type the LockWord to unblank the
  9658.     screen. This is a security feature so that if a user leaves the menu
  9659.     unattended, it prevents others from tampering with the system.
  9660.     
  9661.      Example:
  9662.        LockWord = 'secret'
  9663.     
  9664.     See Also: LogoffTime BlankTime UseNovPassword
  9665.     
  9666.     Category: Display
  9667.     
  9668.     
  9669.      Logoff
  9670.     
  9671.     Logoff logs you off the network the same way that LogoffTime does except
  9672.     it does it immediately. See LogoffTime for details as to how.
  9673.     
  9674.      Example:
  9675.        OnKey 'L'
  9676.          |Logoff   ;note the use of the '|' under the OnKey statement
  9677.     
  9678.     See Also: LogoffTime
  9679.     
  9680.     Category: Execution
  9681.     
  9682.     
  9683.      LogoffTime : Number
  9684.     
  9685.     MarxMenu supports automatic logoff after a number of minutes of
  9686.     inactivity set by LogoffTime. This only has effect while you are in the
  9687.     menu and not while an application is running. It is set as follows:
  9688.     
  9689.      LogoffTime = 5 ;sets time to 5 minutes
  9690.     
  9691.     Setting LogoffTime to 0 disables this feature.
  9692.     
  9693.     On a Novell network the current drive is changed to the first network
  9694.     drive letter. Any map roots on this drive are removed. Then it changes
  9695.     to the \LOGIN directory. Typically the current directory will be set to
  9696.     F:\LOGIN.
  9697.     
  9698.     MarxMenu will first look for a batch file in the \LOGIN directory called
  9699.     OFF.BAT. If it doesn't find it, MarxMenu will look for OFF.BAT on the
  9700.     PATH. If this isn't found, MarxMenu will look for LOGOFF.EXE. If this
  9701.     isn't found, then MarxMenu will look for LOGOUT.COM.
  9702.     
  9703.  
  9704.     Computer Tyme * MarxMenu * Users Manual                 Page #163
  9705.     -----------------------------------------------------------------
  9706.     
  9707.     LOGOFF.EXE and LOGOUT.COM are executed by stuffing the keyboard buffer.
  9708.     
  9709.     The best way to use this feature is to create an OFF.BAT file in your
  9710.     \LOGIN directory or on the PATH.
  9711.     
  9712.     Logging off is a tricky process and requires that everything is done
  9713.     right in order for it to work. If strange things happen use ECHO ON and
  9714.     PAUSE in your batch files in order to watch what is happening.
  9715.     
  9716.     See Also: LockWord Logoff
  9717.     
  9718.     Category: Execution
  9719.     
  9720.     
  9721.      Logout
  9722.     
  9723.     Same as Logoff.
  9724.     
  9725.     See Also: Logoff LogoffTime
  9726.     
  9727.     Category: Execution
  9728.     
  9729.     
  9730.      LongestLine
  9731.     
  9732.     This system variable is set whenever a text file is read using the
  9733.     ReadTextFile command. LongestLine is set to the length of the longest
  9734.     line in the file.
  9735.     
  9736.      Example:
  9737.        var temp, temp2
  9738.        write "Name of file to scan: "
  9739.        temp=readln
  9740.        ReadTextFile(temp,temp2)
  9741.        writeln " "
  9742.        write "The longest line in " temp " is "
  9743.        writeln Longestline " Characters."
  9744.     
  9745.     See Also: ReadTextFile
  9746.     
  9747.     Category: File String
  9748.     
  9749.     
  9750.      Loop
  9751.     
  9752.     MarxMenu has a looping structure that lets you execute a piece of code a
  9753.     specific number of times. It is used as follows:
  9754.     
  9755.      Example:
  9756.        Loop 8
  9757.           Writeln 'Pass Number ' LoopIndex
  9758.        EndLoop
  9759.     
  9760.  
  9761.     Computer Tyme * MarxMenu * Users Manual                 Page #164
  9762.     -----------------------------------------------------------------
  9763.     
  9764.     You start with LOOP (Number) which specifies the number of times to
  9765.     execute the code between LOOP and ENDLOOP. There are 2 variables
  9766.     available here for loop control. LoopIndex starts at 1 and is
  9767.     incremented at each EndLoop. When LoopIndex becomes greater than
  9768.     LoopLimit, the loop exits. LoopIndex and LoopLimit refer to the
  9769.     innermost loop.
  9770.     
  9771.     As loops are nested LoopIndexes and LoopLimits are kept in two arrays;
  9772.     LoopIndexStack and LoopLimitStack. There is also a variable called
  9773.     LoopLevel which points to the current loop parameters.
  9774.     
  9775.      Thus:
  9776.        LoopIndex is the same as LoopIndexStack[LoopLevel]
  9777.        LoopLimit is the same as LoopLimitStack[LoopLevel]
  9778.     
  9779.     You may therefore access outer loop parameters through the loop stacks.
  9780.     For instance LoopIndexStack[LoopLevel - 1] would refer to the second
  9781.     innermost loop index. LoopIndexStack[1] refers to the outermost loop.
  9782.     
  9783.     The loop variables can be read and written to so you can adjust the
  9784.     looping parameters while inside the loop. You can even adjust the
  9785.     parameters of outer loops.
  9786.     
  9787.     You can also pass an array to a loop instead of a number. If an array is
  9788.     passed MarxMenu will loop for the number of elements in that array.
  9789.     
  9790.      Example:
  9791.        Var X
  9792.        ReadTextFile('MARXREAD.ME',X)
  9793.        OpenPrinter
  9794.     
  9795.        ;Loop X is the same as Loop NumberOfElements X
  9796.     
  9797.        Loop X
  9798.           PrintLn X[LoopIndex]
  9799.        EndLoop
  9800.        ClosePrinter
  9801.     
  9802.     See Also: EndLoop LoopIndex LoopLimit LoopLevel
  9803.     
  9804.     Category: Conditional
  9805.     
  9806.     
  9807.      LoopIndex : Number
  9808.     
  9809.     Returns the index of the loop you are in.
  9810.     
  9811.      Example:
  9812.        Loop 5
  9813.           Writeln LoopIndex    ;writes the numbers 1 to 5
  9814.        EndLoop
  9815.     
  9816.  
  9817.     Computer Tyme * MarxMenu * Users Manual                 Page #165
  9818.     -----------------------------------------------------------------
  9819.     
  9820.     See Also: Loop EndLoop LoopLimit LoopLevel
  9821.     
  9822.     Category: Conditional
  9823.     
  9824.     
  9825.      LoopLevel : Number
  9826.     
  9827.     Returns the number of nested loops currently running. This includes all
  9828.     nested loops not just the current procedure.
  9829.     
  9830.     See Also: Loop EndLoop LoopLimit LoopIndex
  9831.     
  9832.     Category: Conditional
  9833.     
  9834.     
  9835.      LoopLimit : Number
  9836.     
  9837.     Returns the upper limit of the loop you are in.
  9838.     
  9839.      Example:
  9840.        Loop 5
  9841.           Writeln LoopLimit   ;writes the number 5, 5 times.
  9842.        EndLoop
  9843.     
  9844.     See Also: Loop EndLoop LoopIndex LoopLevel
  9845.     
  9846.     Category: Conditional
  9847.     
  9848.     
  9849.      LowerCase (String) : String
  9850.     
  9851.     Returns the lower case of the string according to international
  9852.     character rules.
  9853.     
  9854.      Example:
  9855.        Writeln LowerCase('ABCDE')   ;returns 'abcde'
  9856.     
  9857.     See Also: UpperCase
  9858.     
  9859.     Category: String International
  9860.     
  9861.     
  9862.      LowWord (Number) : Number
  9863.     
  9864.     Returns the value of the lower 16 bits of a number.
  9865.     
  9866.      Example:
  9867.        LowWord -1   ;returns 255
  9868.     
  9869.     See Also: HighWord
  9870.     
  9871.     Category: Math
  9872.     
  9873.  
  9874.     Computer Tyme * MarxMenu * Users Manual                 Page #166
  9875.     -----------------------------------------------------------------
  9876.     
  9877.      MachineName : String
  9878.     
  9879.     This reads or sets the MachineName for NetBios networks.
  9880.     
  9881.      Example:
  9882.        MachineName = IBM   ;sets the MachineName
  9883.        Writeln MachineName ;displays the MachineName
  9884.     
  9885.     Category: Novell MSNet Vines
  9886.     
  9887.     
  9888.      MakeListEntry (Local Name, Server Name)
  9889.     
  9890.     MakeListEntry adds an entry to the network redirection list for
  9891.     assigning drive letters to network servers or redirecting printer output
  9892.     to network printers.
  9893.     
  9894.      Example:
  9895.        MakeListEntry ('P:','\\TYME\SYS\PUBLIC')
  9896.        MakeListEntry ('LPT1','\\TYME\LASER')
  9897.     
  9898.     See Also: AssignList CancelListEntry
  9899.     
  9900.     Category: Novell MSNet Vines
  9901.     
  9902.     
  9903.      MarxVersion : String
  9904.     
  9905.     Returns the version number of the MarxMenu you are running.
  9906.     
  9907.     Category: String
  9908.     
  9909.     
  9910.      MasterEnvironment
  9911.     
  9912.     MasterEnvironment selects the Master Environment for use with
  9913.     environment access commands.
  9914.     
  9915.     See Also: ReadEnv SetEnv ReadEnvironment ShellEnvironment
  9916.     See Also: CurrentEnvironment ParentEnvironment
  9917.     
  9918.     Category: Environment
  9919.     
  9920.     
  9921.      Max (Num,Num) : Num
  9922.     
  9923.     Returns the largest of two numbers or strings.
  9924.     
  9925.      Example:
  9926.        Writeln Max(2,3)     ;returns 3
  9927.     
  9928.     See Also: Min
  9929.     
  9930.  
  9931.     Computer Tyme * MarxMenu * Users Manual                 Page #167
  9932.     -----------------------------------------------------------------
  9933.     
  9934.     Category: Math String Float
  9935.     
  9936.     
  9937.      MatrixInvert (2D Array)
  9938.     
  9939.     MatrixInvert reverses the coordinates of a 2-dimensional array. This is
  9940.     useful when used with ReadAscTextFile to reverse the field and record
  9941.     layout.
  9942.     
  9943.      Example:
  9944.        var Data NameList
  9945.     
  9946.        ReadAscTextFile('PHONE.LST',Data)
  9947.        MatrixInvert Data
  9948.        NameList = Data[1]
  9949.     
  9950.     Category: Array
  9951.     
  9952.     
  9953.      McpClass : Number
  9954.     
  9955.     Returns the math coprocessor class.
  9956.     
  9957.      0 = None
  9958.      1 = 8078
  9959.      2 = 80287
  9960.      3 = 80387
  9961.      4 = 80487 (486 CPU)
  9962.     
  9963.     See Also: McpName CpuClass
  9964.     
  9965.     Category: System
  9966.     
  9967.     
  9968.      McpName : String
  9969.     
  9970.     Returns the name of the marh coprocessor. If there is no math
  9971.     coprocessor then an empty string is returned. Names include:
  9972.     
  9973.       8078, 80287, 80387, 80487
  9974.     
  9975.     See Also: McpClass CpuName
  9976.     
  9977.     Category: System
  9978.     
  9979.     
  9980.      Mem (seg,ofs) : Number
  9981.     
  9982.     Returns the byte at memory location seg:ofs or lets you write to the
  9983.     byte at seg:ofs.
  9984.     
  9985.      Example:
  9986.        X = Mem(40,5)  ;reads memory into X
  9987.        Mem(40,5) = X  ;writes X into memory
  9988.     
  9989.  
  9990.     Computer Tyme * MarxMenu * Users Manual                 Page #168
  9991.     -----------------------------------------------------------------
  9992.     
  9993.     See Also: MemW MemL
  9994.     
  9995.     Category: Memory
  9996.     
  9997.     
  9998.      MemL (seg,ofs) : Number
  9999.     
  10000.     Returns the long integer at memory location seg:ofs or lets you write to
  10001.     the byte at seg:ofs.
  10002.     
  10003.      Example:
  10004.        X = MemL(40,5)  ;reads memory into X
  10005.        MemL(40,5) = X  ;writes X into memory
  10006.     
  10007.     See Also: Mem MemW
  10008.     
  10009.     Category: Memory
  10010.     
  10011.     
  10012.      MemSize : Number
  10013.     
  10014.     Returns total memory size in K. (640 = 640k)
  10015.     
  10016.     Category: Memory
  10017.     
  10018.     
  10019.      MemW (seg,ofs) : Number
  10020.     
  10021.     Returns the word at memory location seg:ofs or lets you write to the
  10022.     byte at seg:ofs.
  10023.     
  10024.      Example:
  10025.        X = MemW(40,5)  ;reads memory into X
  10026.        MemW(40,5) = X  ;writes X into memory
  10027.     
  10028.     See Also: Mem MemL
  10029.     
  10030.     Category: Memory
  10031.     
  10032.     
  10033.      MemoryLoc (TsrName) : Number
  10034.     
  10035.     MemoryLoc returns the memory segment address of the TSR name you
  10036.     specify. If the TSR isn't in memory it returns a 0.
  10037.     
  10038.      Example:
  10039.        Writeln 'Btrieve is at $' HexString(MemoryLoc('BTRIEVE'),4)
  10040.     
  10041.     See Also: InMem
  10042.     
  10043.     Category: Memory
  10044.     
  10045.  
  10046.     Computer Tyme * MarxMenu * Users Manual                 Page #169
  10047.     -----------------------------------------------------------------
  10048.     
  10049.      MenuFileName : String
  10050.     
  10051.     This returns the name of the current menu file including the complete
  10052.     path. It can be used under an OnKey statement to edit the current menu
  10053.     as follows:
  10054.     
  10055.      Example:
  10056.        OnKey 'E'
  10057.          EDIT MenuFileName
  10058.     
  10059.     Category: String
  10060.     
  10061.     
  10062.      MenuKeyBuffer
  10063.     
  10064.     This is an internal MarxMenu variable. It is where the environment
  10065.     variable KSV= is read. Characters in this string variable are treated as
  10066.     if someone had typed them from the keyboard.
  10067.     
  10068.     This variable can be set to blank in order to override the effects of
  10069.     SET KSV= or can be set to a different value in order to automatically
  10070.     make selections as if they were typed in.
  10071.     
  10072.     See Also: SavePosition KeySave
  10073.     
  10074.     Category: Keyboard
  10075.     
  10076.     
  10077.      MhsDirectory : String
  10078.     
  10079.     Returns the directory of MHS.
  10080.     
  10081.      Example:
  10082.        Writeln MhsDirectory   ; '\\TYME\SYS\MHS'
  10083.     
  10084.     Category: MHS Directory
  10085.     
  10086.     
  10087.      MhsMailDirectory : String
  10088.     
  10089.     Returns the mail directory of MHS.
  10090.     
  10091.      Example:
  10092.        Writeln MhsMailDirectory   ; '\\TYME\SYS\MHS\MAIL'
  10093.     
  10094.     Category: MHS Directory
  10095.     
  10096.  
  10097.     Computer Tyme * MarxMenu * Users Manual                 Page #170
  10098.     -----------------------------------------------------------------
  10099.     
  10100.      MhsReadFile (FileName,Header,Message)
  10101.     
  10102.     MhsReadFile reads FileName into two arrays. The Header array contains the
  10103.     MHS message header. The Message array contains the MHS message.
  10104.     
  10105.      Example:
  10106.        var MailFiles Mail Headers X
  10107.     
  10108.        WholeFileNames
  10109.        ReadDirectory(MhsUserDirectory + '\MHS\*.',MailFiles)
  10110.     
  10111.        Loop MailFiles
  10112.           MhsReadFile(MailFiles[LoopIndex],Mail[LoopIndex],Headers[LoopIndex])
  10113.        EndLoop
  10114.     
  10115.        Loop Mail
  10116.           X = LoopIndex
  10117.           Loop Headers[X]
  10118.              Writeln Headers[X,LoopIndex]
  10119.           EndLoop
  10120.     
  10121.           Loop Mail[X]
  10122.              Writeln Mail[X,LoopIndex]
  10123.           EndLoop
  10124.        EndLoop
  10125.     
  10126.     Category: MHS
  10127.     
  10128.     
  10129.      MhsSendDirectory : String
  10130.     
  10131.     Returns the directory of MHS where messages are placed to be sent.
  10132.     
  10133.      Example:
  10134.        Writeln MhsSendDirectory   ; '\\TYME\SYS\MHS\MAIL\SND'
  10135.     
  10136.     Category: MHS Directory
  10137.     
  10138.     
  10139.      MhsUserDirectory : String
  10140.     
  10141.     Returns the user directory of MHS.
  10142.     
  10143.      Example:
  10144.        Writeln MhsMailDirectory   ; '\\TYME\SYS\MHS\MAIL\USERS\MARC'
  10145.     
  10146.     Category: MHS Directory
  10147.     
  10148.  
  10149.     Computer Tyme * MarxMenu * Users Manual                 Page #171
  10150.     -----------------------------------------------------------------
  10151.     
  10152.      Mid (string,pos,count) : String
  10153.     
  10154.     Returns a string starting at pos for count.
  10155.     
  10156.      Example:
  10157.        Writeln Mid('ABCDEFG',2,3)     ;returns 'CDE'
  10158.     
  10159.     Mid also allows you to write into a string at a specified point.
  10160.     
  10161.      Example:
  10162.        St = 'ABCDEFG'
  10163.        Mid(St,3) = '1'           X becomes 'AB1DEFG'
  10164.        Mid(St,3) = '123'         X becomes 'AB123FG'
  10165.        Mid(St,3) = '1234567'     X becomes 'AB1234567'
  10166.        Mid(St,9) = '12'          X becomes 'ABCDEFG 12'
  10167.     
  10168.     Category: String
  10169.     
  10170.     
  10171.      Min (Num,Num) : Num
  10172.     
  10173.     Returns the smallest of two numbers or strings.
  10174.     
  10175.      Example:
  10176.        Writeln Min(2,3)     ;returns 2
  10177.     
  10178.     See Also: Max
  10179.     
  10180.     Category: Math String Float
  10181.     
  10182.     
  10183.      MinorDosVersion : Number
  10184.     
  10185.     Returns the minor DOS version number.
  10186.     
  10187.     See Also: DosVersion DosVersionString
  10188.     
  10189.     Category: System
  10190.     
  10191.     
  10192.      Minute : Number
  10193.     
  10194.     Returns the current minute.
  10195.     
  10196.     Category: Time
  10197.     
  10198.  
  10199.     Computer Tyme * MarxMenu * Users Manual                 Page #172
  10200.     -----------------------------------------------------------------
  10201.     
  10202.      MinuteOf (Date) : Number
  10203.     
  10204.     Returns the minute of a date. If Date is passed as a string it is
  10205.     converted automatically.
  10206.     
  10207.      Example:
  10208.        MinuteOf '6:15 pm'  ;returns 15
  10209.     
  10210.     See Also: TimeOf BadDate
  10211.     
  10212.     Category: Time
  10213.     
  10214.     
  10215.      MkDir (String)
  10216.     
  10217.     Makes a new directory. The FileResult variable returns the DOS result
  10218.     error code. A zero in FileResult indicates success.
  10219.     
  10220.      Example:
  10221.        MkDir 'C:\MARX'
  10222.     
  10223.     See Also: ChDir RmDir
  10224.     
  10225.     Category: File Directory
  10226.     
  10227.     
  10228.      Mod : Operator
  10229.     
  10230.     Returns the remainder of the division of two numbers.
  10231.     
  10232.      Example:
  10233.        25 mod 7 = 4
  10234.     
  10235.     Category: Math
  10236.     
  10237.     
  10238.      ModifyPath
  10239.     
  10240.     The MarxMenu directory should be in the search path. This is because if
  10241.     you change directories, MarxMenu may not be able to find the menu files.
  10242.     MarxMenu will now test the PATH= environment variable before it writes
  10243.     the batch file to execute a program. If the MarxMenu path is not
  10244.     included, MarxMenu will add the path to the Master Environment if it
  10245.     can.
  10246.     
  10247.     If for some reason you don't want to allow MarxMenu to modify the master
  10248.     environment, use the command:
  10249.     
  10250.      ModifyPath Off
  10251.     
  10252.     Category: Environment
  10253.     
  10254.  
  10255.     Computer Tyme * MarxMenu * Users Manual                 Page #173
  10256.     -----------------------------------------------------------------
  10257.     
  10258.      Month : Number
  10259.     
  10260.     Returns current month.
  10261.     
  10262.     Category: Time
  10263.     
  10264.     
  10265.      MonthOf (Date) : Number
  10266.     
  10267.     Returns the month of a date. If Date is passed as a string it is
  10268.     converted automatically.
  10269.     
  10270.      Example:
  10271.        MonthOf 'April'   ;returns 4
  10272.     
  10273.     See Also: TimeOf BadDate
  10274.     
  10275.     Category: Time
  10276.     
  10277.     
  10278.      Mouse
  10279.     
  10280.     MarxMenu normally uses the mouse if present. If you don't want to use
  10281.     the mouse you can use the command:
  10282.     
  10283.      Mouse Off
  10284.     
  10285.     To turn the mouse back on type:
  10286.     
  10287.      Mouse On
  10288.     
  10289.     The mouse is actually switched on and off at the point when MarxMenu
  10290.     waits at the keyboard for a keypress.
  10291.     
  10292.     Mouse Sensitivity can be set for individual workstations on a network by
  10293.     setting environment variables MouseX and MouseY as follows:
  10294.     
  10295.      Set MouseX=15
  10296.      Set MouseY=25
  10297.     
  10298.     See Also: MouseHorizontal MouseVertical
  10299.     
  10300.     Category: System MouseControl
  10301.     
  10302.     
  10303.      MouseHorizontal (Number)
  10304.     
  10305.     Controls the horizontal sensitivity of the mouse. The larger the number,
  10306.     the less sensitive the mouse. Default is 25.
  10307.     
  10308.      Example:
  10309.        MouseHorizontal = 25
  10310.     
  10311.  
  10312.     Computer Tyme * MarxMenu * Users Manual                 Page #174
  10313.     -----------------------------------------------------------------
  10314.     
  10315.     See Also: MouseVertical Mouse
  10316.     
  10317.     Category: MouseControl
  10318.     
  10319.     
  10320.      MouseIRQ : Number
  10321.     
  10322.     Returns the interrupt number that the mouse driver is using.
  10323.     
  10324.     Category: System MouseControl
  10325.     
  10326.     
  10327.      MouseType : String
  10328.     
  10329.     Reurns the type of mouse being used. If a mouse driver isn't present it
  10330.     returns an empty string.
  10331.     
  10332.      Mouse Types: BUS, SERIAL, HP, INPORT, PS2, UNKNOWN
  10333.     
  10334.     Category: System MouseControl
  10335.     
  10336.     
  10337.      MouseVersion : String
  10338.     
  10339.     MouseVersion returns the version of the mouse driver you are using. If a
  10340.     mouse driver isn't present it returns an empty string.
  10341.     
  10342.     Category: System MouseControl
  10343.     
  10344.     
  10345.      MouseVertical (Number)
  10346.     
  10347.     Controls the vertical sensitivity of the mouse. The larger the number,
  10348.     the less sensitive the mouse. Default is 15.
  10349.     
  10350.      Example:
  10351.        MouseVertical = 15
  10352.     
  10353.     See Also: MouseHorizontal Mouse
  10354.     
  10355.     Category: MouseControl
  10356.     
  10357.     
  10358.      MoveWindow (Horizontal,Vertical)
  10359.     
  10360.     Moves top window. If Horizontal is negative motion is left. If
  10361.     Vertical is negative, motion is up.
  10362.     
  10363.      Example:
  10364.        MoveWindow -3 4 ;moves window 3 spaces left and 4 down
  10365.     
  10366.     Category: Display
  10367.     
  10368.  
  10369.     Computer Tyme * MarxMenu * Users Manual                 Page #175
  10370.     -----------------------------------------------------------------
  10371.     
  10372.      MsDos (Registers)
  10373.     
  10374.     MsDos calls the interrupt 21h system call using values passed in an
  10375.     array of 10 numbers. The array is set up using predefined Qualifiers
  10376.     that represent the registers that are passed. These qualifiers are:
  10377.     
  10378.      AX BX CX DX DI SI DS ES BP FL
  10379.     
  10380.      Example: Get Current Drive
  10381.        var Reg
  10382.        Reg.AX = $1900
  10383.        MsDos (Reg)
  10384.        Writeln Char(LowWord(Reg.AX) + 1) ':'     ;writes C:
  10385.     
  10386.     See Also: Intr
  10387.     
  10388.     Category: System
  10389.     
  10390.     
  10391.      MxCmd : String
  10392.     
  10393.     This is an internal string variable that is written to the environment
  10394.     variable MXCMD. This variable can be written to control what MarxMenu
  10395.     will write to the Shell Environment. If this variable is written to, it
  10396.     overrides anything that MarxMenu automatically writes.
  10397.     
  10398.      Example:
  10399.        OnKey 'A'
  10400.          |MxCmd = 'SHUTDOWN.BAT'
  10401.          |ExitMenu
  10402.     
  10403.     Category: Environment String Execution
  10404.     
  10405.     
  10406.      NamePart (String) : String
  10407.     
  10408.     Returns the name part of a file name.
  10409.     
  10410.      Example:
  10411.        NamePart ('C:\MARX\MARXMENU.EXE') ;returns MARXMENU
  10412.     
  10413.     See Also: Extension PathPart FilePart
  10414.     
  10415.     Category: String
  10416.     
  10417.  
  10418.     Computer Tyme * MarxMenu * Users Manual                 Page #176
  10419.     -----------------------------------------------------------------
  10420.     
  10421.      NetworkVersion : Boolean
  10422.     
  10423.     Returns true if you are running the network version of MarxMenu.
  10424.     
  10425.     Category: Misc
  10426.     
  10427.     
  10428.      NextWord (String) : String
  10429.     
  10430.     This command returns the next logical word of a string variable and
  10431.     removes the string from the original string.
  10432.     
  10433.      Example:
  10434.        StringA = 'one two three'
  10435.        StringB = NextWord(StringA)
  10436.     
  10437.        StringB contains 'one'
  10438.        StringA contains 'two three'
  10439.     
  10440.     Category: String
  10441.     
  10442.     
  10443.      Nil
  10444.     
  10445.     Nil returns a zero or empty value for any type data. As a boolean Nil
  10446.     returns False. As a number Nil returns 0. As a string, Nil returns an
  10447.     empty string.
  10448.     
  10449.     Category: Constants
  10450.     
  10451.     
  10452.      NoBoxBorder
  10453.     
  10454.     Use this command if you don't want a border around the menus.
  10455.     
  10456.     See Also: SingleLineBox DoubleLineBox BlockBox CustomBox
  10457.     
  10458.     Category: Display
  10459.     
  10460.     
  10461.      NoExit
  10462.     
  10463.     Prevents ESC key from allowing you to exit menu. To exit, you must
  10464.     execute the ExitMenu command. This could be password protected.
  10465.     
  10466.     See Also: ExitMenu
  10467.     
  10468.     Category: Execution
  10469.     
  10470.  
  10471.     Computer Tyme * MarxMenu * Users Manual                 Page #177
  10472.     -----------------------------------------------------------------
  10473.     
  10474.      Not : Operator
  10475.     
  10476.     Returns logical Not if operators are boolean; or bitwise Not if
  10477.     operators are numeric.
  10478.     
  10479.      Example:
  10480.        if Not ExistDir('C:\MARX') then Writeln 'Marx not Installed!'
  10481.        Not(0) = -1
  10482.     
  10483.     See Also: And Or Xor
  10484.     
  10485.     Category: Math Boolean
  10486.     
  10487.     
  10488.      NotesLeft : Number
  10489.     
  10490.     NotesLeft returns the number of notes left in the music buffer to play.
  10491.     The music buffer is self-adjusting and can store a day's worth of music.
  10492.     
  10493.     Category: Music
  10494.     
  10495.     
  10496.      NotesPlayed : Number
  10497.     
  10498.     Returns the number of notes played. If NotesLeft ever reaches 0,
  10499.     NotesPlayed also is set to 0.
  10500.     
  10501.     Category: Music
  10502.     
  10503.     
  10504.      NovAccountExpDate (UserName) : Date
  10505.     
  10506.     Returns the Novell account expiration date. You must be logged in to be
  10507.     able to read this.
  10508.     
  10509.      Example:
  10510.        DaysToExpire = NovAccountExpDate(UserName) - Today / SecondsInDay
  10511.     
  10512.     Category: Bindery Time
  10513.     
  10514.     
  10515.      NovAddUserToGroup (User,Group)
  10516.     
  10517.     Adds a user to a group and updates GROUPS_I'M_IN, GROUP_MEMBERS, and
  10518.     SECURITY_EQUALS properties.
  10519.     
  10520.      Example:
  10521.        NovAddUserToGroup ('MARC','EVERYONE')
  10522.     
  10523.     See Also: NovRemoveUserFromGroup
  10524.     
  10525.     Category: Bindery
  10526.     
  10527.  
  10528.     Computer Tyme * MarxMenu * Users Manual                 Page #178
  10529.     -----------------------------------------------------------------
  10530.     
  10531.      NovAddToSet (Obj,Prop,ObjType,MemberObj,MemberType)
  10532.     
  10533.     Adds an object to a property that is a set property.
  10534.     
  10535.      Example: Add a user to a group
  10536.        NovAddToSet(Group,'GROUP_MEMBERS',2,User,1)
  10537.        NovAddToSet(User,"GROUPS_I'M_IN",1,Group,2)
  10538.        NovAddToSet(User,'SECURITY_EQUALS',1,Group,2)
  10539.     
  10540.     See Also: NovDeleteFromSet NovSetProperty
  10541.     
  10542.     Category: Bindery
  10543.     
  10544.     
  10545.      NovAttach (Server)
  10546.     
  10547.     NovAttach is used to create a software link between you and a server,
  10548.     usually a second server. It must be followed by a NovLogin command to
  10549.     log you into the server if you want to do anything useful there.
  10550.     
  10551.      Example:
  10552.        NovAttach 'TYME'
  10553.     
  10554.     See Also: NovDetach
  10555.     
  10556.     Category: Novell
  10557.     
  10558.     
  10559.      NovAttachedServers (Array)
  10560.     
  10561.     Returns a list of servers you are already attached to.
  10562.     
  10563.      Example:
  10564.        var Servers
  10565.        NovAttachedServers(Servers)
  10566.        Loop Servers
  10567.           Writeln Servers[LoopIndex]
  10568.        EndLoop
  10569.     
  10570.     See Also: NovServers
  10571.     
  10572.     Category: Novell Array
  10573.     
  10574.     
  10575.      NovAutoDetach (On/Off)
  10576.     
  10577.     When using MarxMenu to log into a Novell network, MarxMenu will detach
  10578.     from the file server, if NovAutoDetach is on, when the screen blanker
  10579.     kicks in, and reattach when the screen is restored. This keeps the
  10580.     workstation from tying up a connection number while waiting to log in.
  10581.     If you want to use a workstation as a print server without being logged
  10582.     in you will want to set this to Off.
  10583.     
  10584.  
  10585.     Computer Tyme * MarxMenu * Users Manual                 Page #179
  10586.     -----------------------------------------------------------------
  10587.     
  10588.     Default is Off.
  10589.     
  10590.     Category: Novell
  10591.     
  10592.     
  10593.      NovBinderyAccess : Number
  10594.     
  10595.     NovBinderyAccess returns the users bindery access level.
  10596.     
  10597.      0 - Not logged in.
  10598.      1 - Logged in.
  10599.      2 - Object Access.
  10600.      3 - Supervisor Access.
  10601.     
  10602.     Category: Bindery
  10603.     
  10604.     
  10605.      NovBroadcastMode (Mode)
  10606.     
  10607.     This reads or sets the message broadcast mode.
  10608.     
  10609.      Example:
  10610.        Writeln NovBroadcastMode
  10611.        NovBroadcastMode = 3
  10612.     
  10613.      Modes:
  10614.        0 - All Messages, same as running CastOn
  10615.        1 - Server messages only, same as running CastOff
  10616.        2 - Same as 0 but user has to poll server for messages
  10617.        3 - Same as 1 but user has to poll server for messages
  10618.     
  10619.     See Also: NovSendMessage NovGetMessage
  10620.     
  10621.     Category: Novell
  10622.     
  10623.     
  10624.      NovCaptureCopies (Port) : Number
  10625.     
  10626.     NovCaptureCopies reads or sets the number of copies to print for a
  10627.     particular port.
  10628.     
  10629.      Example:
  10630.        NovCaptureCopies (2) = 5      ;Sets LPT2 to print 5 copies
  10631.        Writeln NovCaptureCopies (2)  ;displays the copies setting on LPT2
  10632.     
  10633.     See Also: NovCaptureQueue
  10634.     
  10635.     Category: Novell Printer
  10636.     
  10637.  
  10638.     Computer Tyme * MarxMenu * Users Manual                 Page #180
  10639.     -----------------------------------------------------------------
  10640.     
  10641.      NovCaptureFF (Port) On/Off
  10642.     
  10643.     NovCaptureFF reads or sets the printer Form Feed function of a
  10644.     particular port.
  10645.     
  10646.      Example:
  10647.        NovCaptureFF (2) On       ;Sets LPT2 Form Feed to On
  10648.        Writeln NovCaptureFF (2)  ;displays the Form Feed setting on LPT2
  10649.     
  10650.     See Also: NovCaptureQueue
  10651.     
  10652.     Category: Novell Printer
  10653.     
  10654.     
  10655.      NovCaptureFile (Port) File
  10656.     
  10657.     This command is used to capture the output from an LPT port to a
  10658.     specified file. If output is set to an empty string then this command
  10659.     performs the same function as an endcapture.
  10660.     
  10661.      Example:
  10662.        NovCaptureFile (1) = "PRINTER.TXT"   ;Captures LPT1 output to File.
  10663.        NovCaptureFile (1) = ""              ;Ends Capture of Port.
  10664.     
  10665.     See Also: NovCaptureQueue
  10666.     
  10667.     Category: Novell Printer
  10668.     
  10669.     
  10670.      NovCaptureFlush (Port)
  10671.     
  10672.     This commands flushes any data present in a Netware Print queue to
  10673.     the printer.
  10674.     
  10675.      Example:
  10676.        NovCaptureFlush (2)    ;Flush any data in queue on port 2
  10677.     
  10678.     See Also: NovCaptureQueue
  10679.     
  10680.     Category: Novell Printer
  10681.     
  10682.     
  10683.      NovCaptureForm (Port) : Number
  10684.     
  10685.     NovCaptureForm reads or sets the printer form of a particular port.
  10686.     
  10687.      Example:
  10688.        NovCaptureForm (2) = 3      ;Sets LPT2 to form 3
  10689.        Writeln NovCaptureForm (2)  ;displays the form setting on LPT2
  10690.     
  10691.     See Also: NovCaptureQueue
  10692.     
  10693.  
  10694.     Computer Tyme * MarxMenu * Users Manual                 Page #181
  10695.     -----------------------------------------------------------------
  10696.     
  10697.     Category: Novell Printer
  10698.     
  10699.     
  10700.      NovCaptureQueue (Port)
  10701.     
  10702.     Returns the name of the queue that the port is being captured to. A nul
  10703.     string indicates capturing is not active. This command can also be used
  10704.     to start capturing and set the queue to capture. A server can also be
  10705.     specified.
  10706.     
  10707.      Example:
  10708.        Writeln NovCaptureQueue (2)    ;shows capture queue for LPT2
  10709.        NovCaptureQueue (2) = 'LASER'  ;captures LPT2 to server Laser Printer
  10710.        NovCaptureQueue (2) = 'TYME/LASER'  ;specifies server TYME
  10711.        NovCaptureQueue (2) = ''       ;End Capture on LPT2
  10712.     
  10713.     Category: Novell Printer
  10714.     
  10715.     
  10716.      NovCaptureReset (Port) : String
  10717.     
  10718.     NovCaptureReset can read or set the reset string for a print queue.
  10719.     
  10720.      Example:
  10721.        NovCaptureReset (1) = Esc + char($15)
  10722.        Writeln NovCaptureReset (1) ;reads the capture setup string
  10723.     
  10724.     See Also: NovCaptureSetup
  10725.     
  10726.     Category: Novell Printer
  10727.     
  10728.     
  10729.      NovCaptureSetup (Port) : String
  10730.     
  10731.     NovCaptureSetup can read or set the setup string for a print queue.
  10732.     
  10733.      Example:
  10734.        NovCaptureSetup (1) = Esc + char($15)
  10735.        Writeln NovCaptureSetup (1) ;reads the capture setup string
  10736.     
  10737.     See Also: NovCaptureReset
  10738.     
  10739.     Category: Novell Printer
  10740.     
  10741.     
  10742.      NovCaptureTabSize (Port) : Number
  10743.     
  10744.     NovCaptureTabSize reads or sets the printer TabSize of a particular
  10745.     port. Range is 1 - 18.
  10746.     
  10747.      Example:
  10748.        NovCaptureTabSize (2) = 8       ;Sets LPT2 TabSize to 8 spaces
  10749.        Writeln NovCaptureTabSize (2)   ;displays the TabSize setting on LPT2
  10750.     
  10751.  
  10752.     Computer Tyme * MarxMenu * Users Manual                 Page #182
  10753.     -----------------------------------------------------------------
  10754.     
  10755.     See Also: NovCaptureQueue
  10756.     
  10757.     Category: Novell Printer
  10758.     8
  10759.     
  10760.      NovCaptureTimeOut (Port) : number
  10761.     
  10762.     NovCaptureTimeOut reads or sets the printer TimeOut of a particular
  10763.     port.
  10764.     
  10765.      Example:
  10766.        NovCaptureTimeOut (2) = 10      ;Sets LPT2 to 10 second TimeOut
  10767.        Writeln NovCaptureTimeOut (2)   ;displays the TimeOut setting on LPT2
  10768.     
  10769.     See Also: NovCaptureQueue
  10770.     
  10771.     Category: Novell Printer
  10772.     
  10773.     
  10774.      NovCaptureUseBanner (Port)
  10775.     
  10776.     This reads or sets whether or not a print banner is used.
  10777.     
  10778.      Example:
  10779.        Writeln NovCaptureUseBanner (2)  ;displays if LPT2 is using a banner
  10780.        NovCaptureBanner (2) = On        ;sets banner to On for LPT2
  10781.     
  10782.     See Also: NovCaptureQueue
  10783.     
  10784.     Category: Novell Printer
  10785.     
  10786.     
  10787.      NovChangePassword (OldPassword,NewPassword)
  10788.     
  10789.     Changes the Novell users password from OldPassword to NewPassword.
  10790.     
  10791.      Example:
  10792.        NovChangePassword('OLDPASS','NEWPASS')
  10793.     
  10794.     See Also: NovChangeObjPassword
  10795.     
  10796.     Category: Bindery
  10797.     
  10798.     
  10799.      NovChangeObjPassword (Obj, Type, OldPassword, NewPassword)
  10800.     
  10801.     NovChangeObjPassword is like NovChangePassword except it allows you to
  10802.     change the password on other objects than yourself. Type refers to the
  10803.     object type. Users are type 1.
  10804.     
  10805.      Example:
  10806.         NovChangeObjPassword('DAN',1,'POTATOE','POTATO')
  10807.     
  10808.  
  10809.     Computer Tyme * MarxMenu * Users Manual                 Page #183
  10810.     -----------------------------------------------------------------
  10811.     
  10812.     See Also: NovChangePassword
  10813.     
  10814.     Category: Bindery
  10815.     
  10816.     
  10817.      NovCleanVolumeName (String) : String
  10818.     
  10819.     Returns a string containing the server and volume name of a filename or
  10820.     directory.
  10821.     
  10822.      Example:
  10823.        Writeln NovCleanVolumeName('L:')   ;Returns 'MARX/SYS:LOGIN'
  10824.     
  10825.     See Also: CleanFileName TrueName
  10826.     
  10827.     Category: Novell
  10828.     
  10829.     
  10830.      NovClearConnection (Connection Number)
  10831.     
  10832.     Disconnects a specific connection number from the server. Requires
  10833.     console operator rights to use this command.
  10834.     
  10835.      Example:
  10836.        NovClearConnection 2
  10837.     
  10838.     Category: Novell
  10839.     
  10840.     
  10841.      NovCloseBindery
  10842.     
  10843.     Closes the Novell bindery for access.
  10844.     
  10845.     See Also: NovOpenBindery
  10846.     
  10847.     Category: Bindery
  10848.     
  10849.     
  10850.      NovCloseSemaphore (Name)
  10851.     
  10852.     This closes semaphore Name. If there are no other users using this
  10853.     semaphore, it is deleted.
  10854.     
  10855.      Example:
  10856.        NovCloseSemaphore 'LOTUS'
  10857.     
  10858.     Category: Novell
  10859.     
  10860.  
  10861.     Computer Tyme * MarxMenu * Users Manual                 Page #184
  10862.     -----------------------------------------------------------------
  10863.     
  10864.      NovConnection (ServerName) : Number
  10865.     
  10866.     This returns your workstation's logical connection number to the server
  10867.     specified by ServerName. The ServerName parameter is optional and if not
  10868.     specified then the connection number returned is the connection number
  10869.     on the default server. A zero indicates that you are not connected to
  10870.     any servers.
  10871.     
  10872.      Example:
  10873.        Var Serv1,Serv2
  10874.        Serv1 = 'TYME'
  10875.        Serv2 = 'TSS'
  10876.        Writeln "I'm Connection " NovConnection(Serv1) " on Server "+Serv1
  10877.        Writeln "I'm Connection " NovConnection(Serv2) " on Server "+Serv2
  10878.     
  10879.     Category: Novell
  10880.     
  10881.     
  10882.      NovConnectionsInUse : Number
  10883.     
  10884.     Returns the number of connections in use.
  10885.     
  10886.      Example:
  10887.        Writeln 'There are ' NovConnections ' connections in use.'
  10888.     
  10889.     Category: Novell
  10890.     
  10891.     
  10892.      NovConsoleOperator : Boolean
  10893.     
  10894.     This returns true if the user has Console Operator privileges. This can
  10895.     come in handy when you are trying to determine who gets access to the
  10896.     command line.
  10897.     
  10898.      Example:
  10899.        OnKey Esc
  10900.          |if NovConsoleOperator
  10901.          |   ExitMenu
  10902.          |endif
  10903.     
  10904.     Category: Novell
  10905.     
  10906.     
  10907.      NovCreateObject (Name, ObjectType)
  10908.     
  10909.     Creates a bindery object of a specific object type. If NovStaticObject
  10910.     is set to true, then the object will be permanent unless it is deleted.
  10911.     If set to false, then the object will be automatically deleted if the
  10912.     file server is rebooted.
  10913.     
  10914.      Example:
  10915.     
  10916.  
  10917.     Computer Tyme * MarxMenu * Users Manual                 Page #185
  10918.     -----------------------------------------------------------------
  10919.     
  10920.        ;- This example creates a new user
  10921.     
  10922.        var
  10923.          UserName
  10924.     
  10925.        UserName = 'TIMESYNC'
  10926.     
  10927.        ;- Delete object if it already exists
  10928.     
  10929.        NovDeleteObject(UserName,1);
  10930.     
  10931.        NovStaticObject On               ;Static Object
  10932.        NovObjectSecurity $31
  10933.     
  10934.        NovCreateObject (UserName,1)
  10935.     
  10936.        NovStaticProperty On
  10937.        NovSetProperty On
  10938.        NovPropertySecurity $32
  10939.        NovCreateProperty(UserName,'SECURITY_EQUALS',1)
  10940.     
  10941.        NovPropertySecurity $31
  10942.        NovCreateProperty(UserName,"GROUPS_I'M_IN",1)
  10943.     
  10944.        ;- Copies login control from the supervisor
  10945.     
  10946.        NovSetProperty Off
  10947.        NovPropertySecurity $32
  10948.        NovCreateProperty(UserName,'LOGIN_CONTROL',1)
  10949.        NovPropertyValues(Item,'SUPERVISOR','LOGIN_CONTROL',1)
  10950.        NovWritePropValue(Item,UserName,'LOGIN_CONTROL',1)
  10951.     
  10952.        NovCreateProperty(UserName,'ACCOUNT_BALANCE',1)
  10953.        NovWritePropValue(Set [''],UserName,'ACCOUNT_BALANCE',1)
  10954.     
  10955.        NovPropertySecurity $22
  10956.        NovCreateProperty(UserName,'MISC_LOGIN_INFO',1)
  10957.     
  10958.        NovPropertySecurity $31
  10959.        NovCreateProperty(UserName,'IDENTIFICATION',1)
  10960.        NovWritePropValue(Set ['Time Sync User'],UserName,'IDENTIFICATION',1)
  10961.     
  10962.        NovChangeObjPassword(UserName,1,'','SETTIME')
  10963.     
  10964.        ;- Gives user Console Operator access.
  10965.     
  10966.        NovAddToSet(NovDefaultServer,'OPERATORS',4,UserName,1)
  10967.     
  10968.  
  10969.     Computer Tyme * MarxMenu * Users Manual                 Page #186
  10970.     -----------------------------------------------------------------
  10971.     
  10972.     NovObjectSecurity controls who can access the object. The default
  10973.     security is $11 which allows anyone logged into the network to access
  10974.     the object for both read and write. In this example the security of
  10975.     $31 allows anyone logged in to read the object, but only users with
  10976.     supervisor equivalence can write/modify/delete it.  With some objects
  10977.     as in the above example where we create a new Netware group, you must
  10978.     also assign the necessary properties before the object is functional
  10979.     to Netware.
  10980.     
  10981.     See Also: NovStaticObject NovObjectSecurity NovDeleteObject
  10982.     See Also: NovCreateProperty
  10983.     
  10984.     Category: Bindery
  10985.     
  10986.     
  10987.      NovCreateProperty (Object, Prop, ObjType)
  10988.     
  10989.     Creates a property on the object. The security of the property is
  10990.     controlled by setting the variable NovPropertySecurity. You can also
  10991.     control if the property is an item property or a set property. This is
  10992.     done by setting NovSetProperty to True or False.
  10993.     
  10994.     If NovStaticProperty is true then the property will remain until someone
  10995.     deletes it. If it is not static (dynamic) then it will be deleted if the
  10996.     server is rebooted.
  10997.     
  10998.     A set property contains a list of objects. An item property contains a
  10999.     value up to 128 bytes long. The value can be anything.
  11000.     
  11001.      Example:
  11002.        ; Create a Group Example.
  11003.     
  11004.        NovDeleteObject ('TESTGROUP',2)
  11005.        NovStaticObject On
  11006.        NovObjectSecurity $31
  11007.     
  11008.        NovCreateObject ('TESTGROUP',2)
  11009.     
  11010.        NovSetProperty On
  11011.        NovStaticProperty On
  11012.        NovPropertySecurity $31
  11013.        NovCreateProperty('TESTGROUP','GROUP_MEMBERS',2)
  11014.     
  11015.     See Also: NovStaticProperty NovPropertySecurity NovDeleteProperty
  11016.     See Also: NovCreateObject
  11017.     
  11018.     Category: Bindery
  11019.     
  11020.  
  11021.     Computer Tyme * MarxMenu * Users Manual                 Page #187
  11022.     -----------------------------------------------------------------
  11023.     
  11024.      NovDefaultServer : String
  11025.     
  11026.     Returns the name of the default file server.
  11027.     
  11028.      Example:
  11029.        Writeln NovDefaultServer
  11030.     
  11031.     Category: Novell
  11032.     
  11033.     
  11034.      NovDeleteFromSet (Obj,Prop,ObjType,MemberObject,MemberType)
  11035.     
  11036.     Deletes an object from a property that is a set property.
  11037.     
  11038.      Example:
  11039.        To Remove a user to a group:
  11040.     
  11041.        NovDeleteFromSet(Group,'GROUP_MEMBERS',2,User,1)
  11042.        NovDeleteFromSet(User,"GROUPS_I'M_IN",1,Group,2)
  11043.        NovDeleteFromSet(User,'SECURITY_EQUALS',1,Group,2)
  11044.     
  11045.     See Also: NovAddToSet NovSetProperty
  11046.     
  11047.     Category: Bindery
  11048.     
  11049.     
  11050.      NovDeleteObject (Object,Type)
  11051.     
  11052.     Deletes an object from the bindery.
  11053.     
  11054.      Example:
  11055.        NovDeleteObject('JOE',1)
  11056.     
  11057.     Category: Bindery
  11058.     
  11059.     
  11060.      NovDeleteProperty (Obj,Prop,Type)
  11061.     
  11062.     NovDeleteProperty deletes a property from an object.
  11063.     
  11064.      Example:
  11065.        NovDeleteProperty('TEST','WASTE',2)
  11066.     
  11067.     Category: Bindery
  11068.     
  11069.     
  11070.      NovDetach (Server)
  11071.     
  11072.     This is used to drop the connection to a server. It also logs you off.
  11073.     
  11074.      Example:
  11075.        NovDetach 'TYME'
  11076.     
  11077.  
  11078.     Computer Tyme * MarxMenu * Users Manual                 Page #188
  11079.     -----------------------------------------------------------------
  11080.     
  11081.     See Also: NovAttach
  11082.     
  11083.     Category: Novell
  11084.     
  11085.     
  11086.      NovDownServer
  11087.     
  11088.     Takes the default file server down if there are no files open. You must
  11089.     be supervisor equivalent to user this command.
  11090.     
  11091.     See Also: NovForceDownServer
  11092.     
  11093.     Category: Novell
  11094.     
  11095.     
  11096.      NovEndCapture (Port)
  11097.     
  11098.     Ends printer capture for LPT ports.
  11099.     
  11100.      Example:
  11101.         NovEndCapture (1)  ;cancels LPT1 capture
  11102.     
  11103.     See Also: NovCaptureQueue
  11104.     
  11105.     Category: Novell Printer
  11106.     
  11107.     
  11108.      NovForceDownServer
  11109.     
  11110.     Takes the default file server down regardless of open files.  You must be
  11111.     supervisor equivalent to use this command.
  11112.     
  11113.     See Also: NovDownServer
  11114.     
  11115.     Category: Novell
  11116.     
  11117.     
  11118.      NovFreeDirSlots (Path) : Number
  11119.     
  11120.     Returns the number of free directory slots for this volume.
  11121.     
  11122.      Example:
  11123.        Writeln NovFreeDirSlots 'SYS:'
  11124.        Writeln NovFreeDirSlots 'F:'
  11125.     
  11126.     See Also: NovTotalDirSlots
  11127.     
  11128.     Category: Novell
  11129.     
  11130.  
  11131.     Computer Tyme * MarxMenu * Users Manual                 Page #189
  11132.     -----------------------------------------------------------------
  11133.     
  11134.      NovFreeVolumeSpace (Path) : Number
  11135.     
  11136.     Returns the free file space of the volume in bytes.
  11137.     
  11138.      Example:
  11139.        Writeln NovFreeVolumeSpace 'SYS:'
  11140.        Writeln NovFreeVolumeSpace 'F:'
  11141.     
  11142.     See Also: NovTotalVolumeSpace NovUsedVolumeSpace
  11143.     
  11144.     Category: Novell
  11145.     
  11146.     
  11147.      NovFullName (User)
  11148.     
  11149.     Returns the Full Name of the user as set by Syscon. If NovFullName is
  11150.     used without a parameter then MyLoginName is assumed.
  11151.     
  11152.      Example:
  11153.        Writeln NovFullName 'MARC'  ;Writes Marc Perkel
  11154.     
  11155.     See Also: NovLoginName
  11156.     
  11157.     Category: Bindery
  11158.     
  11159.     
  11160.      NovGetConnections (Array,Name,Type)
  11161.     
  11162.     NovGetConnections return an array of connection numbers that a specified
  11163.     user or other object is attached to. For users use type 1.
  11164.     
  11165.      Example:
  11166.        var Connections
  11167.        NovGetConnections(Connections,'VICKI',1)
  11168.        Loop Connections
  11169.           NovSendMessage('The Princess Called!',Connections[LoopIndex])
  11170.        EndLoop
  11171.     
  11172.     Category: Bindery
  11173.     
  11174.     
  11175.      NovGetMessage : String
  11176.     
  11177.     When in broadcast mode 2 or 3 this polls the server for stored messages
  11178.     and returns them if found.
  11179.     
  11180.      Example:
  11181.        NovBroadcastMode = 3
  11182.        Writeln NovGetMessage
  11183.     
  11184.     See Also: NovSendMessage NovBroadcastMode
  11185.     
  11186.  
  11187.     Computer Tyme * MarxMenu * Users Manual                 Page #190
  11188.     -----------------------------------------------------------------
  11189.     
  11190.     Category: Novell
  11191.     
  11192.     
  11193.      NovGraceLoginReset (User) : Number
  11194.     
  11195.     Returns the number of grace logins that Novell resets when the user
  11196.     changes his password.
  11197.     
  11198.      Example:
  11199.        Writeln NovGraceLoginReset (NovMyLoginName)
  11200.     
  11201.     If the User parameter is not included, MarxMenu will assume the current
  11202.     user.
  11203.     
  11204.     You can also set the grace login reset as follows:
  11205.     
  11206.      NovGraceLoginReset = 5
  11207.     
  11208.     See Also: NovGraceLogins
  11209.     
  11210.     Category: Bindery
  11211.     
  11212.     
  11213.      NovGraceLogins (User) : Number
  11214.     
  11215.     Returns the number of grace logins the user has left.
  11216.     
  11217.      Example:
  11218.        Writeln 'You have ' NovGraceLogins (NovMyLoginName) ' left!'
  11219.     
  11220.     If the User parameter is not included, MarxMenu will assume the current
  11221.     user.
  11222.     
  11223.     You can also set the grace logins as follows:
  11224.     
  11225.      NovGraceLogins = 5
  11226.     
  11227.     See Also: NovPasswordExpDate NovGraceLoginReset
  11228.     
  11229.     Category: Bindery
  11230.     
  11231.     
  11232.      NovGroupMembers (Group,Array)
  11233.     
  11234.     This reads all the members of Group and puts them into an array.
  11235.     
  11236.      Example:
  11237.        var Members
  11238.        NovGroupMembers ('EVERYONE',Members)
  11239.        Loop Members
  11240.           Writeln Members[LoopIndex]
  11241.        EndLoop
  11242.     
  11243.  
  11244.     Computer Tyme * MarxMenu * Users Manual                 Page #191
  11245.     -----------------------------------------------------------------
  11246.     
  11247.     Category: Bindery Array
  11248.     
  11249.     
  11250.      NovGroups (Array)
  11251.     
  11252.     Fills array with list of all groups.
  11253.     
  11254.      Example:
  11255.        var Groups
  11256.        NovGroups (Groups)
  11257.        Loop Groups
  11258.           Writeln Groups[LoopIndex]
  11259.        EndLoop
  11260.     
  11261.     See Also: NovUsersLoggedIn NovUsers NovPrintQueues NovServers
  11262.     
  11263.     Category: Bindery
  11264.     
  11265.     
  11266.      NovInGroup (Group) : Boolean
  11267.     
  11268.     Returns true if you are in the group.
  11269.     
  11270.      Example:
  11271.        If NovInGroup ('PAYROLL') then Writeln 'Accounting'
  11272.     
  11273.     Category: Bindery
  11274.     
  11275.     
  11276.      NovLastLoginDate (User) : Date
  11277.     
  11278.     Returns the date and time the user last logged in.
  11279.     
  11280.      Example:
  11281.        DaysSinceLogin = NovLastLoginDate(UserName) - Today / SecondsInDay
  11282.     
  11283.     If the User parameter is not included, MarxMenu will assume the current
  11284.     user.
  11285.     
  11286.     Category: Bindery Time
  11287.     
  11288.     
  11289.      NovLogin (Name,Password)
  11290.     
  11291.     This logs you into a file server. It is different than the Novell's
  11292.     login program in that it doesn't execute any login scripts. It merely
  11293.     gets you in. You can include the preferred server with the name.
  11294.     
  11295.      Example:
  11296.        NovLogin ('MARC','PASSWORD')
  11297.        NovLogin ('TYME/MARC','PASSWORD')
  11298.     
  11299.  
  11300.     Computer Tyme * MarxMenu * Users Manual                 Page #192
  11301.     -----------------------------------------------------------------
  11302.     
  11303.     NovLogin will automatically attach to the file server for you and
  11304.     preserve all default and preferred server settings.
  11305.     
  11306.     The variable NovResult is set to 0 or 223 if successful. The 223 result
  11307.     indicated a grace login.
  11308.     
  11309.     If you are using Netware 3, MarxMenu shells a program named SUBLOGIN.EXE
  11310.     which does encrypted passwords. This program needs to be on the search
  11311.     path. If you are using MarxMenu to log into the network the you will
  11312.     need a copy of SUBLOGIN in the LOGIN directory.
  11313.     
  11314.     If you don't use SUBLOGIN you will have to go to the server console and
  11315.     type:
  11316.     
  11317.      SET ALLOW UNENCRYPTED PASSWORDS = ON
  11318.     
  11319.     See Also: NovDetach
  11320.     
  11321.     Category: Novell
  11322.     
  11323.     
  11324.      NovLoginName (Connection) : String
  11325.     
  11326.     This returns the login name of the user at any specified connection.
  11327.     This can also be used to see who else is on the network. If no
  11328.     connection is specified, the current connection is assumed.
  11329.     
  11330.      Example:
  11331.        Writeln NovLoginName       ;name of user on this connection
  11332.        Writeln NovLoginName (2)   ;name of user on connection 2
  11333.     
  11334.     See Also: NovFullName
  11335.     
  11336.     Category: Bindery
  11337.     
  11338.     
  11339.      NovLogout
  11340.     
  11341.     This logs you off the server. Warning! Make sure that you are running
  11342.     MarxMenu from a local drive and not the server you are logging out of.
  11343.     MarxMenu needs access to overlays within MARXMENU.EXE and a Logout can
  11344.     cut off access. This command automatically runs FixPath.
  11345.     
  11346.     See Also: FixPath Logoff LogoffTime
  11347.     
  11348.     Category: Novell Vines
  11349.     
  11350.  
  11351.     Computer Tyme * MarxMenu * Users Manual                 Page #193
  11352.     -----------------------------------------------------------------
  11353.     
  11354.      NovMapDrive (Drive,Directory)
  11355.     
  11356.     This will map a drive letter to a directory like the Novell MAP
  11357.     command does. You may specify volume names and server names.
  11358.     
  11359.      Example:
  11360.        NovMapDrive ('J','TYME2/SYS:PUBLIC\DOS')
  11361.     
  11362.     Mapping a drive to a nul string ('') deletes the drive map.
  11363.     
  11364.     See Also: NovMapRoot
  11365.     
  11366.     Category: Novell
  11367.     
  11368.     
  11369.      NovMapRoot (Drive,Path)
  11370.     
  11371.     NovMapRoot works like Novell's MAP ROOT command. It allows you to map a
  11372.     drive letter to a subdirectory and make it look like the root directory
  11373.     of that drive. You may specify volume names and server names.
  11374.     
  11375.      Example:
  11376.        NovMapRoot('P','TYME/SYS:PUBLIC')
  11377.     
  11378.     P:\ is the same as the TYME/SYS:PUBLIC directory
  11379.     
  11380.     See Also: NovMapDrive
  11381.     
  11382.     Category: Novell
  11383.     
  11384.     
  11385.      NovMaxConnections : Number
  11386.     
  11387.     Returns the maximum number of connections that your Netware will allow.
  11388.     
  11389.     Category: Novell
  11390.     
  11391.     
  11392.      NovMinPasswordLength (User) : Number
  11393.     
  11394.     Returns the minimum length of the password that Novell will accept for a
  11395.     new password.
  11396.     
  11397.      Example:
  11398.        Writeln NovGraceLoginReset (NovMyLoginName)
  11399.     
  11400.     If the User parameter is not included, MarxMenu will assume the current
  11401.     user.
  11402.     
  11403.     Category: Bindery
  11404.     
  11405.  
  11406.     Computer Tyme * MarxMenu * Users Manual                 Page #194
  11407.     -----------------------------------------------------------------
  11408.     
  11409.      NovMyLoginName : String
  11410.     
  11411.     This returns the login name of the user.
  11412.     
  11413.      Example:
  11414.        Writeln NovMyLoginName
  11415.     
  11416.     Category: Bindery
  11417.     
  11418.     
  11419.      NovMyPassword (Password) : Boolean
  11420.     
  11421.     Novell won't let you read the password, but it will let you guess and
  11422.     tell you if you're right. This routine returns true if the password
  11423.     passed is the correct password.
  11424.     
  11425.      Example"
  11426.        var Pass
  11427.        Pass = Readln
  11428.        if NovMyPassword (Pass)
  11429.           ;Do Something
  11430.        else
  11431.           Writeln 'Bad Password!'
  11432.        endif
  11433.     
  11434.     Category: Bindery
  11435.     
  11436.     
  11437.      NovMyPrintQueues (Array)
  11438.     
  11439.     Returns a list of all print queues that the user has access too.
  11440.     
  11441.      Example:
  11442.        var Queues
  11443.        NovMyPrintQueues (Queues)
  11444.        Loop Queues
  11445.           Writeln Queues[LoopIndex]
  11446.        EndLoop
  11447.     
  11448.     See Also: NovPrintQueues
  11449.     
  11450.     Category: Bindery Array
  11451.     
  11452.     
  11453.      NovObjectID (User) : String
  11454.     
  11455.     NovObjectID returns the users Novell object identification code. This is
  11456.     the same as the name of the users mail directory.
  11457.     
  11458.      Example:
  11459.        MailDir = 'F:\MAIL\' + NovObjectID (NovMyLoginName)
  11460.     
  11461.  
  11462.     Computer Tyme * MarxMenu * Users Manual                 Page #195
  11463.     -----------------------------------------------------------------
  11464.     
  11465.     Category: Bindery
  11466.     
  11467.     
  11468.      NovObjects (2D Array)
  11469.     
  11470.     NovObjects reads all objects from the bindery returning a 2-dimensional
  11471.     array containing all object names and object types.
  11472.     
  11473.      Example:
  11474.        NovObjects (X)
  11475.        Loop X
  11476.           Writeln X[LoopIndex,1] ' ' X[LoopIndex,2]
  11477.        EndLoop
  11478.     
  11479.      Common Object Types:
  11480.        1 - User
  11481.        2 - Group
  11482.        3 - Print Queue
  11483.        4 - File Server
  11484.        5 - Job Server
  11485.        6 - Gateway
  11486.        7 - Print Server
  11487.     
  11488.     See Also: NovScanProperties NovPropertyValues
  11489.     
  11490.     Category: Bindery Array
  11491.     
  11492.     
  11493.      NovObjectSecurity : Number
  11494.     
  11495.     NovObjectSecurity is used when objects are created to determine who can
  11496.     read or write the object. The number is one byte. The upper 4 bits
  11497.     control who can read the object, the lower 4 bits control who can write
  11498.     to the object.
  11499.     
  11500.       0000 Anyone
  11501.       0001 Logged In
  11502.       0010 Only your Object
  11503.       0011 Supervisor
  11504.       0100 Netware Itself
  11505.     
  11506.     The default is $11 (00010001) which is anyone logged in can read or
  11507.     write to the object.
  11508.     
  11509.     NovObjectSecurity can also read and set the security of an existing
  11510.     object.
  11511.     
  11512.      Example:
  11513.        NovObjectSecurity('MARXMENU',600) = $13
  11514.        Writeln NovObjectSecurity('MARXMENU',600)
  11515.     
  11516.  
  11517.     Computer Tyme * MarxMenu * Users Manual                 Page #196
  11518.     -----------------------------------------------------------------
  11519.     
  11520.     See Also: NovCreateObject NovStaticObject NovPropertySecurity
  11521.     
  11522.     Category: Bindery
  11523.     
  11524.     
  11525.      NovOpenBindery
  11526.     
  11527.     Opens the Novell bindery for access.
  11528.     
  11529.     See Also: NovCloseBindery
  11530.     
  11531.     Category: Bindery
  11532.     
  11533.     
  11534.      NovOpenSemaphore (Name,Value)
  11535.     
  11536.     This opens semaphore Name and assigns it an initial value. If the
  11537.     semaphore already exists, the value isn't changed. The number of
  11538.     semaphore users is increased by one if this user hasn't already opened
  11539.     this semaphore name.
  11540.     
  11541.      Example:
  11542.        NovOpenSemaphore ('LOTUS',0)
  11543.     
  11544.     See Also: NovCloseSemaphore NovSemaphoreUsers
  11545.     
  11546.     Category: Novell
  11547.     
  11548.     
  11549.      NovPasswordExpDate (UserName) : Date
  11550.     
  11551.     Returns the Novell password expiration date. You must be logged in to be
  11552.     able to read this.
  11553.     
  11554.      Example:
  11555.        DaysToExpire = NovPasswordExpDate(UserName) - Today / SecondsInDay
  11556.     
  11557.     See Also: NovGraceLogins
  11558.     
  11559.     Category: Bindery Time
  11560.     
  11561.     
  11562.      NovPreferredServer : String
  11563.     
  11564.     Returns the name of the preferred file server. This is set with the
  11565.     NovSetPreferredServer command.
  11566.     
  11567.     Normally the default server is controlled by the current directory. If a
  11568.     preferred server is set then this default is changed. Setting the
  11569.     preferred server to blank resets the default server. When MarxMenu
  11570.     terminates the Preferred server setting is terminated.
  11571.     
  11572.  
  11573.     Computer Tyme * MarxMenu * Users Manual                 Page #197
  11574.     -----------------------------------------------------------------
  11575.     
  11576.     Category: Novell
  11577.     
  11578.     
  11579.      NovPrimaryServer : String
  11580.     
  11581.     Returns the name of the primary file server. This is the one you first
  11582.     logged into.
  11583.     
  11584.     Category: Novell
  11585.     
  11586.     
  11587.      NovPrintQueues (Array)
  11588.     
  11589.     Fills array with list of all print Queues. The user might not have
  11590.     access rights to all these queues.
  11591.     
  11592.      Example:
  11593.        var Queues
  11594.        NovPrintQueues (Queues)
  11595.        Loop Queues
  11596.           Writeln Queues[LoopIndex]
  11597.        EndLoop
  11598.     
  11599.     See Also: NovMyPrintQueues NovUsersLoggedIn NovUsers
  11600.     See Also: NovGroups NovServers
  11601.     
  11602.     Category: Bindery Array Printer
  11603.     
  11604.     
  11605.      NovPropertySecurity : Number
  11606.     
  11607.     NovPropertySecurity is used when properties are created to determine who
  11608.     can read or write the property. The number is one byte. The upper 4 bits
  11609.     controls who can read the property, the lower 4 bits control who can
  11610.     write to the property.
  11611.     
  11612.       0000 Anyone
  11613.       0001 Logged In
  11614.       0010 Only your Object
  11615.       0011 Supervisor
  11616.       0100 Netware Itself
  11617.     
  11618.     The default is $11 (00010001) which is anyone logged in can read or
  11619.     write to the property.
  11620.     
  11621.     NovPropertySecurity can also read and set the security of an existing
  11622.     property.
  11623.     
  11624.      Example:
  11625.        NovPropertySecurity('MARXMENU','USERS',600) = $13
  11626.        Writeln NovPropertySecurity('MARXMENU','USERS',600)
  11627.     
  11628.  
  11629.     Computer Tyme * MarxMenu * Users Manual                 Page #198
  11630.     -----------------------------------------------------------------
  11631.     
  11632.     See Also: NovCreateProperty NovObjectSecurity NovSetProperty
  11633.     
  11634.     Category: Bindery
  11635.     
  11636.     
  11637.      NovPropertyValues (Array, Object, Prop, Type)
  11638.     
  11639.     Reads property values of object into an array. If the property is a Set
  11640.     property, then the names of the objects contained in the set are read.
  11641.     If the property is an Item property, then the property is read as an
  11642.     array of strings that are all 128 bytes in length. These strings will
  11643.     contain binary data.
  11644.     
  11645.      Example:       ;shows contents of bindery
  11646.        StandardIO
  11647.     
  11648.        Var Objects, Obj, Prop, Ty, Values
  11649.     
  11650.        Qualifier ObjName ObjType
  11651.     
  11652.        NovObjects (Objects)
  11653.     
  11654.        Loop Objects
  11655.           Obj = Objects[LoopIndex].ObjName
  11656.           Ty = Objects[LoopIndex].ObjType
  11657.           Writeln Obj ' --------- ' Ty
  11658.           NovScanProperties (Prop,Obj,Ty)
  11659.           Loop Prop
  11660.              Writeln '   ' Prop[LoopIndex]
  11661.              NovPropertyValues(Values,Obj,Prop[LoopIndex],Ty)
  11662.              Loop Values
  11663.                 Writeln '      ' Values[LoopIndex]
  11664.              EndLoop
  11665.           EndLoop
  11666.        EndLoop
  11667.     
  11668.     See Also: NovObjects NovScanProperties NovWritePropValue
  11669.     
  11670.     Category: Bindery Array
  11671.     
  11672.     
  11673.      NovReadGroups (User,Array)
  11674.     
  11675.     This reads all the groups that User belongs to and puts them into an
  11676.     array.
  11677.     
  11678.      Example:
  11679.        var Groups
  11680.        NovReadGroups ('VICKI',Groups)
  11681.        Loop Groups
  11682.           Writeln Groups[LoopIndex]
  11683.        EndLoop
  11684.     
  11685.  
  11686.     Computer Tyme * MarxMenu * Users Manual                 Page #199
  11687.     -----------------------------------------------------------------
  11688.     
  11689.     Category: Bindery Array
  11690.     
  11691.     
  11692.      NovReadSecurityEquals (Name,Array)
  11693.     
  11694.     This reads all the security equivalences that Name belongs to and puts
  11695.     them into an array. (This includes groups).
  11696.     
  11697.      Example:
  11698.        var SecEq
  11699.        NovReadSecurityEquals ('VICKI',SecEq)
  11700.        Loop SecEq
  11701.           Writeln SecEq[LoopIndex]
  11702.        EndLoop
  11703.     
  11704.     Category: Bindery Array
  11705.     
  11706.     
  11707.      NovRemoveUserFromGroup (User,Group)
  11708.     
  11709.     Removes a user to a group and updates GROUPS_I'M_IN, GROUP_MEMBERS, and
  11710.     SECURITY_EQUALS properties.  You must be supervisor equivalent in order
  11711.     to use this command.
  11712.     
  11713.      Example:
  11714.        NovRemoveUserFromGroup ('MARC','EVERYONE')
  11715.     
  11716.     See Also: NovAddUserToGroup
  11717.     
  11718.     Category: Bindery
  11719.     
  11720.     
  11721.      NovRenameObject (OldName, NewName, ObjType)
  11722.     
  11723.     Renames an object.
  11724.     
  11725.      Example:
  11726.        NovRenameObject('VICKY','VICKI',1)
  11727.          ;corrects serious spelling error
  11728.     
  11729.     Category: Bindery
  11730.     
  11731.     
  11732.      NovResult : Number
  11733.     
  11734.     NovResult is a variable like FileResult that returns the success status
  11735.     of the previous Novell system call. A zero generally indicates success.
  11736.     
  11737.     Category: Novell
  11738.     
  11739.  
  11740.     Computer Tyme * MarxMenu * Users Manual                 Page #200
  11741.     -----------------------------------------------------------------
  11742.     
  11743.      NovScanProperties (Array, Object, ObjType)
  11744.     
  11745.     NovScanProperties reads the properties (not the values) into an array.
  11746.     You also have to pass the object type.
  11747.     
  11748.      Novell Object Types:
  11749.        1 - User
  11750.        2 - Group
  11751.        3 - Print Queue
  11752.        4 - File Server
  11753.        5 - Job Server
  11754.        6 - Gateway
  11755.        7 - Print Server
  11756.     
  11757.      Example:
  11758.        var Properties
  11759.        NovScanProperties (Properties,NovMyLoginName,1)
  11760.     
  11761.        Loop NumberOfElements(Properties)
  11762.           Writeln(Properties[LoopIndex])
  11763.        EndLoop
  11764.     
  11765.     See Also: NovObjects NovPropertyValues
  11766.     
  11767.     Category: Bindery Array
  11768.     
  11769.     
  11770.      NovScanTrusteePaths (2D Array,ObjectName,ObjectType)
  11771.     
  11772.     Returns a 2-dimensional array containing the name of the trustee paths
  11773.     assigned to the object and the trustee access rights.
  11774.     
  11775.      Example:
  11776.        var X
  11777.        NovScanTrusteePaths (X,'MARC',1)
  11778.        Loop X
  11779.           Writeln X[LoopIndex,1] ' ' X[LoopIndex,2]
  11780.        EndLoop
  11781.     
  11782.     Category: Novell Array
  11783.     
  11784.     
  11785.      NovSecurityEquals (Security) : Boolean
  11786.     
  11787.     Returns True if user has the security equivalent of Security.
  11788.     
  11789.      Example:
  11790.        if NovSecurityEquals ('SUPERVISOR')
  11791.           Execute ('SYSCON')
  11792.        endif
  11793.     
  11794.  
  11795.     Computer Tyme * MarxMenu * Users Manual                 Page #201
  11796.     -----------------------------------------------------------------
  11797.     
  11798.     Category: Bindery
  11799.     
  11800.     
  11801.      NovSemaphoreTimeout
  11802.     
  11803.     This variable controls the amount of time (in 1/18 seconds) that
  11804.     MarxMenu will wait for the value of a semaphore to become not negative.
  11805.     The initial value is 50.
  11806.     
  11807.      Example:
  11808.        NovSemaphoreTimeout = 50
  11809.     
  11810.     See Also: NovWaitOnSemaphore NovSignalSemaphore
  11811.     
  11812.     Category: Novell
  11813.     
  11814.     
  11815.      NovSemaphoreUsers (Name) : Number
  11816.     
  11817.     This returns the number of users that have the semaphore open. This can
  11818.     be used for software metering. Read file METER.INC to use this feature.
  11819.     
  11820.      Example:
  11821.        if NovSemaphoreUsers ('LOTUS') > 5
  11822.           Writeln 'Sorry, all copies of LOTUS are in use.'
  11823.        endif
  11824.     
  11825.     Category: Novell
  11826.     
  11827.     
  11828.      NovSemaphoreValue (Name) : Number
  11829.     
  11830.     This returns the value of a semaphore. The value is initially set with
  11831.     NovOpenSemaphore and can be adjusted with NovSignalSemaphore or
  11832.     NovWaitOnSemaphore.
  11833.     
  11834.      Example:
  11835.        Writeln NamSemaphoreValue
  11836.     
  11837.     See Also: NovOpenSemaphore NovSignalSemaphore NovWaitOnSemaphore
  11838.     
  11839.     Category: Novell
  11840.     
  11841.     
  11842.      NovSendMessage (Message,Connection)
  11843.     
  11844.     Sends a message to the specified connection number just like the Novell
  11845.     SEND command.
  11846.     
  11847.      NovResults:
  11848.           0 - Successful
  11849.         252 - Buffer Full
  11850.         253 - Invalid Connection Number
  11851.         255 - Blocked (running CastOff)
  11852.     
  11853.  
  11854.     Computer Tyme * MarxMenu * Users Manual                 Page #202
  11855.     -----------------------------------------------------------------
  11856.     
  11857.     See Also: NovGetMessage NovBroadcastMode
  11858.     
  11859.     Category: Novell
  11860.     
  11861.     
  11862.      NovServerLogin (On/Off)
  11863.     
  11864.     Enables or disables logins to file server. This requires the user have
  11865.     Console Operator status to use this feature.
  11866.     
  11867.      Example:
  11868.        if NovConsoleOperator then NovServerLogin Off
  11869.     
  11870.     Category: Novell
  11871.     
  11872.     
  11873.      NovServers (Array)
  11874.     
  11875.     This command returns a string array of the file servers you are
  11876.     connected to.
  11877.     
  11878.      Example:
  11879.        var Servers
  11880.        NovServers(Servers)
  11881.        Loop Servers
  11882.           Writeln Servers[LoopIndex]
  11883.        EndLoop
  11884.     
  11885.     Category: Bindery Array
  11886.     
  11887.     
  11888.      NovServerTime : Time
  11889.     
  11890.     NovServerTime can read or set the date and time of a Novell file server.
  11891.     
  11892.      To read the server time:
  11893.         X = NovServerTime
  11894.     
  11895.      To set the server time:
  11896.         NovServerTime = X
  11897.     
  11898.     Category: Novell Time
  11899.     
  11900.     
  11901.      NovSetPreferredServer (Server)
  11902.     
  11903.     Sets the preferred file server. Passing a '' will switch you back to the
  11904.     default or primary file server.
  11905.     
  11906.     See Also: NovSetPrimaryServer NovPreferredServer
  11907.     
  11908.     Category: Novell
  11909.     
  11910.  
  11911.     Computer Tyme * MarxMenu * Users Manual                 Page #203
  11912.     -----------------------------------------------------------------
  11913.     
  11914.      NovSetPrimaryServer (Server)
  11915.     
  11916.     The primary file server is the one that executes your login scripts. It
  11917.     can also be set using the NovSetPrimaryServer command.
  11918.     
  11919.     See Also: NovSetPreferredServer NovPrimaryServer
  11920.     
  11921.     Category: Novell
  11922.     
  11923.     
  11924.      NovSetProperty (On/Off)
  11925.     
  11926.     NovSetProperty is a variable that controls if the property to be created
  11927.     is going to be a set property or an item property.
  11928.     
  11929.     A set property contains a list of objects. An item property contains a
  11930.     value up to 128 bytes long. The value can be anything.
  11931.     
  11932.     NovSetProperty can also be used to read if a property is an item or a
  11933.     set.
  11934.     
  11935.      Example:
  11936.        if NovSetProperty (Object,Property,ObjectType)
  11937.           NovPropertyValues(Values,Object,Property,ObjectType)
  11938.           Loop Values
  11939.              Writeln Values[LoopIndex]
  11940.           EndLoop
  11941.        endif
  11942.     
  11943.     See Also: NovPropertySecurity NovCreateProperty NovStaticProperty
  11944.     
  11945.     Category: Bindery
  11946.     
  11947.     
  11948.      NovShellVersion : String
  11949.     
  11950.     Returns the Novell shell version number.
  11951.     
  11952.     Category: Novell
  11953.     
  11954.     
  11955.      NovSignalSemaphore (Name)
  11956.     
  11957.     This increments the value of a semaphore. It is used to indicate that
  11958.     you are done with a resource and makes it available for the next user.
  11959.     
  11960.     See Also: NovOpenSemaphore NovWaitOnSemaphore
  11961.     
  11962.     Category: Novell
  11963.     
  11964.  
  11965.     Computer Tyme * MarxMenu * Users Manual                 Page #204
  11966.     -----------------------------------------------------------------
  11967.     
  11968.      NovStaticObject : Boolean
  11969.     
  11970.     This variable controls if objects created will be static or dynamic
  11971.     objects. Dynamic objects are deleted when the file server is rebooted.
  11972.     
  11973.     NovStaticObject can also be used to read if an object is static or not.
  11974.     
  11975.      Example:
  11976.        Writeln NovStaticObject('MARXMENU',600)  ;test for static object
  11977.     
  11978.     See Also: NovCreateObject NovObjectSecurity
  11979.     
  11980.     Category: Bindery
  11981.     
  11982.     
  11983.      NovStaticProperty : Boolean
  11984.     
  11985.     This variable controls if objects created will be static or dynamic
  11986.     objects. Dynamic objects are deleted when the file server is rebooted.
  11987.     
  11988.     NovStaticProperty can also be used to read if an property is static or
  11989.     not.
  11990.     
  11991.      Example:
  11992.        Writeln NovStaticProperty('MARXMENU','USERS',600)
  11993.     
  11994.     See Also: NovCreateProperty NovPropertySecurity
  11995.     
  11996.     Category: Bindery
  11997.     
  11998.     
  11999.      NovStationAddress (Connection) : String
  12000.     
  12001.     This returns the stations internetwork address at connection.
  12002.     
  12003.      Example:
  12004.        NovStationAddress (NovConnection)
  12005.           Returns the address of the user's workstation.
  12006.     
  12007.        NovStationAddress (1)
  12008.           Returns the address of station 1.
  12009.     
  12010.        254:41 where 254 is the network number and 41 is the node number.
  12011.     
  12012.     The second parameter (Connection) is optional. If it is left out, the
  12013.     current connection is assumed.
  12014.     
  12015.      Example:
  12016.        NovStationAddress ;Returns the address of the users workstation.
  12017.     
  12018.  
  12019.     Computer Tyme * MarxMenu * Users Manual                 Page #205
  12020.     -----------------------------------------------------------------
  12021.     
  12022.     Category: Novell
  12023.     
  12024.     
  12025.      NovTotalDirSlots (Path) : Number
  12026.     
  12027.     Returns the total number of directory slots for this volume.
  12028.     
  12029.      Example:
  12030.        Writeln NovTotalDirSlots 'SYS:'
  12031.        Writeln NovTotalDirSlots 'F:'
  12032.     
  12033.     See Also: NovFreeDirSlots
  12034.     
  12035.     Category: Novell
  12036.     
  12037.     
  12038.      NovTotalVolumeSpace (Path) : Number
  12039.     
  12040.     Returns the total file space of the volume in bytes.
  12041.     
  12042.      Example:
  12043.        Writeln NovTotalVolumeSpace 'SYS:'
  12044.        Writeln NovTotalVolumeSpace 'F:'
  12045.     
  12046.     See Also: NovFreeVolumeSpace NovUsedVolumeSpace
  12047.     
  12048.     Category: Novell
  12049.     
  12050.     
  12051.      NovUsedVolumeSpace (Path) : Number
  12052.     
  12053.     Returns the used volume space of Path.
  12054.     
  12055.      Example:
  12056.        Writeln NovUsedVolumeSpace('F:')
  12057.     
  12058.     See Also: NovFreeVolumeSpace NovTotalVolumeSpace
  12059.     
  12060.     Category: Novell
  12061.     
  12062.     
  12063.      NovUserInGroup (Name,Group) : Boolean
  12064.     
  12065.     This is used to test if other users are in a group. Returns true is the
  12066.     specified user is in the specified group.
  12067.     
  12068.      Example:
  12069.        if NovUserInGroup ('KEVIN','MAILUSERS')
  12070.           ;do something
  12071.        endif
  12072.     
  12073.     See Also: NovInGroup
  12074.     
  12075.  
  12076.     Computer Tyme * MarxMenu * Users Manual                 Page #206
  12077.     -----------------------------------------------------------------
  12078.     
  12079.     Category: Bindery
  12080.     
  12081.     
  12082.      NovUsers (Array)
  12083.     
  12084.     Fills array with list of all users.
  12085.     
  12086.      Example:
  12087.        var Users
  12088.        NovUsers(Users)
  12089.        Loop Users
  12090.           Writeln Users[LoopIndex]
  12091.        EndLoop
  12092.     
  12093.     See Also: NovUsersLoggedIn NovGroups NovPrintQueues NovServers
  12094.     
  12095.     Category: Bindery Array
  12096.     
  12097.     
  12098.      NovUsersLoggedIn (Array)
  12099.     
  12100.     Fills array with list of all users that are currently logged in.
  12101.     
  12102.      Example:
  12103.        var Users
  12104.        NovUsersLoggedIn(Users)
  12105.        Loop Users
  12106.           Writeln Users[LoopIndex]
  12107.        EndLoop
  12108.     
  12109.     See Also: NovUsers NovGroups NovPrintQueues NovServers
  12110.     
  12111.     Category: Novell Array
  12112.     
  12113.     
  12114.      NovVersionNumber : Number
  12115.     
  12116.     Returns the Novell Netware version number.
  12117.     
  12118.     Category: Novell
  12119.     
  12120.     
  12121.      NovVolumeNumber (Directory) : Number
  12122.     
  12123.     Returns the Novell volume number of a directory.
  12124.     
  12125.      Example:
  12126.        Writeln NovVolumeNumber ('F:')
  12127.     
  12128.     Category: Novell
  12129.     
  12130.  
  12131.     Computer Tyme * MarxMenu * Users Manual                 Page #207
  12132.     -----------------------------------------------------------------
  12133.     
  12134.      NovVolumes (Array)
  12135.     
  12136.     Reads volumes on the default server into an array.
  12137.     
  12138.      Example:
  12139.        var X
  12140.        NovVolumes(X)
  12141.        Loop NumberOfElements(X)
  12142.           Writeln X[LoopIndex]
  12143.        EndLoop
  12144.     
  12145.     Category: Novell Array
  12146.     
  12147.     
  12148.      NovWaitOnSemaphore (Name) : Boolean
  12149.     
  12150.     This decrements the value of a semaphore and if the value is zero or
  12151.     more, returns true. If the value of the semaphore is negative, it
  12152.     returns false. This is used to indicate that you are out of whatever you
  12153.     are testing for.
  12154.     
  12155.     See Also: NovSignalSemaphore NovOpenSemaphore NovSemaphoreTimeout
  12156.     
  12157.     Category: Novell
  12158.     
  12159.     
  12160.      NovWritePropValue (Array,Obj,Prop,Type)
  12161.     
  12162.     NovWritePropValue is used to write values to Item properties only and
  12163.     not to static properties. Item properties contain data in 128-byte
  12164.     segments. These segments are passed as an array of strings. If you are
  12165.     passing binary data then build the binary data into the string array.
  12166.     Any strings that have less than 128 bytes are padded with zeros.
  12167.     
  12168.      Example:
  12169.        AppendArray(Values,'123')
  12170.        AppendArray(Values,'456')
  12171.        AppendArray(Values,'789')
  12172.        NovWritePropValue(Values,'TEST','WASTE',2)
  12173.     
  12174.     See Also: NovPropertyValues
  12175.     
  12176.     Category: Bindery
  12177.     
  12178.     
  12179.      NumberOfElements (Array) : Number
  12180.     
  12181.     This function returns the number of elements in the array. If the
  12182.     variable is not an array, 0 is returned.
  12183.     
  12184.      Example:
  12185.        var Lines
  12186.        ReadTextFile('MARXREAD.ME',Lines)
  12187.        Writeln 'The file is ' NumberofElements (Lines) ' lines long.'
  12188.     
  12189.  
  12190.     Computer Tyme * MarxMenu * Users Manual                 Page #208
  12191.     -----------------------------------------------------------------
  12192.     
  12193.     Category: Array
  12194.     
  12195.     
  12196.      Now : Time
  12197.     
  12198.     Returns the current moment or sets the system clock.
  12199.     
  12200.      Read the current moment:
  12201.         X = Now
  12202.      Set the system clock:
  12203.         Now = X
  12204.     
  12205.     See Also: Today Tomorrow
  12206.     
  12207.     Category: Time
  12208.     
  12209.     
  12210.      NumericOnly (On/Off)
  12211.     
  12212.     When NumericOnly is set to On only numbers will be accepted as input to
  12213.     Readln commands.
  12214.     
  12215.     See Also: Readln
  12216.     
  12217.     Category: String
  12218.     
  12219.     
  12220.      NumLock : Boolean
  12221.     
  12222.     Returns true if the keyboard Num Lock light is On. This command can also
  12223.     set the Num Lock On and Off.
  12224.     
  12225.      Example:
  12226.        if NumLock then Write 'NumLock is On'
  12227.     
  12228.        NumLock On  ;Turns NumLock On
  12229.        NumLock Off ;Turns NumLock Off
  12230.     
  12231.        NumLock (by itself) turns NumLock On.
  12232.     
  12233.        To test for NumLock:
  12234.        if NumLock
  12235.           Writeln 'NumLock is On'
  12236.        endif
  12237.     
  12238.     See Also: CapsLock ScrollLock
  12239.     
  12240.     Category: System
  12241.     
  12242.  
  12243.     Computer Tyme * MarxMenu * Users Manual                 Page #209
  12244.     -----------------------------------------------------------------
  12245.     
  12246.      Offset (String) : Number
  12247.     
  12248.     Returns the memory offset where string is located.
  12249.     
  12250.     See Also: Segment
  12251.     
  12252.     Category: Memory
  12253.     
  12254.     
  12255.      OnKey (Char)
  12256.     
  12257.     When char is selected, the line(s) following are executed up to the next
  12258.     OnKey or end of file. This means that they are written to a BATCH file.
  12259.     
  12260.      Example:
  12261.        Onkey 'W'
  12262.           cd\wordstar
  12263.           ws
  12264.           cd\menu
  12265.     
  12266.     In the above example if 'W' is selected, MarxMenu will create a
  12267.     temporary batch file containing all the lines under the OnKey command.
  12268.     All the lines under an OnKey are written literally to the batch file
  12269.     with few exceptions. All leading and trailing blanks are stripped.
  12270.     String variables are evaluated and their value passed if the name of the
  12271.     string variable name starts with a '%'.
  12272.     
  12273.     If a line begins with a '|' (vertical bar), the line is interpreted
  12274.     rather than written to a batch file. If a '^Label' is used under an
  12275.     OnKey, a jump is made to the 'Label' and interpretation is resumed. This
  12276.     is commonly used to jump to a submenu.
  12277.     
  12278.     Another way to include MarxMenu variables and have more control inside
  12279.     the batch file is to use Bat commands. Bat commands are MarxMenu
  12280.     commands that create lines in the batch file you are creating.
  12281.     
  12282.     Any OnKey statement that causes a batch file to be written to will cause
  12283.     the menu to exit. MarxMenu normally will exit with ErrorLevel 0 unless
  12284.     an ExitCode is set.
  12285.     
  12286.     The first blank line under an OnKey ends what is written to the batch
  12287.     file. One common mistake is that when MarxMenu commands are intermixed
  12288.     with batch file statements that all the MarxMenu commands are executed
  12289.     first. This is because the batch statements are written to a batch file
  12290.     and executed when MarxMenu exist.
  12291.     
  12292.      Example:
  12293.        OnKey 'W'
  12294.          |ChDir('c:\wordstar')
  12295.          WS
  12296.          |ChDir('c:\menu')
  12297.     
  12298.  
  12299.     Computer Tyme * MarxMenu * Users Manual                 Page #210
  12300.     -----------------------------------------------------------------
  12301.     
  12302.     The above example won't work. Here's why. MarxMenu changes to the
  12303.     c:\wordstar directory. Then it stores WS in a batch file buffer. Then it
  12304.     changes to the c:\menu directory. Then MarxMenu writes the batch file
  12305.     and exits and you are in the wrong directory.
  12306.     
  12307.     Here is an example of using conditional statements under an OnKey
  12308.     command:
  12309.     
  12310.      Example:
  12311.        OnKey 'S'
  12312.          |if DisplayType = 'HERCMONO'
  12313.             |ChDir('C:\MONSMART')
  12314.             SMART
  12315.          |else
  12316.             |ChDir('C:\COLSMART')
  12317.             SMART
  12318.          |endif
  12319.     
  12320.     In the above example MarxMenu tests to see if a color-compatible screen
  12321.     is available. If so it runs SMART out of the color directory. Otherwise
  12322.     it runs SMART out of the mono directory. Note that all commands that
  12323.     MarxMenu sees start with the vertical bar character.
  12324.     
  12325.     Sometimes you want to execute a command where the command is created by
  12326.     a complex set of rules. The BAT command is useful here.
  12327.     
  12328.      Example:
  12329.        OnKey 'P'
  12330.          |Bat 'CAPTURE Q=' + Queue + ' C=1 NB NFF TI=5 Local=' + PrnPort
  12331.     
  12332.     In this example the |Bat command allows more specific control over
  12333.     what is sent to the batch file for execution.
  12334.     
  12335.     See Also: MxCmd Bat UseArrows OnScreenOnly
  12336.     
  12337.     Category: Conditional
  12338.     
  12339.     
  12340.      OnScreenOnly (On/Off)
  12341.     
  12342.     This allows you to restrict selections to only what is actually on the
  12343.     screen. Hidden OnKey commands will not execute if this is set on. This
  12344.     allows you to limit user selection to the choices on the screen.
  12345.     
  12346.      Example:
  12347.        OnScreenOnly On
  12348.     
  12349.     See Also: OnKey
  12350.     
  12351.  
  12352.     Computer Tyme * MarxMenu * Users Manual                 Page #211
  12353.     -----------------------------------------------------------------
  12354.     
  12355.     Category: Conditional
  12356.     
  12357.     
  12358.      OpenPrinter
  12359.     
  12360.     This command opens the printer device. It is not necessary to use this
  12361.     command since that it is done automatically whenever you print. But, if
  12362.     you are running under a multitasking shell like Windows or DesqView, it
  12363.     will reserve the printer for your task.
  12364.     
  12365.     If the printer is locked, or if you have specified a file name that
  12366.     can't be created, the variable FileResult will contain the DOS error
  12367.     code (usually 5 for access denied). A FileResult of 0 indicates success.
  12368.     
  12369.     See Also: ClosePrinter FileResult PrinterName
  12370.     
  12371.     Category: Printer
  12372.     
  12373.     
  12374.      OptionSwitch (String1,String2) : Boolean
  12375.     
  12376.     This command tests if String1 contains the option switch String2. If it
  12377.     does, it will remove the switch from String1.
  12378.     
  12379.      Example:
  12380.        String1 = 'Test /A/B/C'
  12381.        HasB = OptionSwitch(String1,'B')
  12382.     
  12383.      HasB will be true.
  12384.      String1 will contain 'Test /A/C'
  12385.     
  12386.     Category: String
  12387.     
  12388.     
  12389.      Or : Operator
  12390.     
  12391.     Returns logical Or if operators are boolean; or bitwise Or if operators
  12392.     are numeric.
  12393.     
  12394.      Example:
  12395.        if (B < 9) or (C > 5) then .....  ;boolean or
  12396.        X or $0F                          ;bitwise or
  12397.     
  12398.     See Also: And Xor Not
  12399.     
  12400.     Category: Math Boolean
  12401.     
  12402.  
  12403.     Computer Tyme * MarxMenu * Users Manual                 Page #212
  12404.     -----------------------------------------------------------------
  12405.     
  12406.      Ord (Char) : Number
  12407.     
  12408.     Returns the numeric value of an ascii character.
  12409.     
  12410.      Example:
  12411.        Ord('A')            ;returns 65
  12412.        Char(Ord('A') + 1)  ;returns 'B'
  12413.     
  12414.     See Also: Char
  12415.     
  12416.     Category: String
  12417.     
  12418.     
  12419.      OutFile : String
  12420.     
  12421.     When using StandardIO the input and output files by default use the
  12422.     console. The output can be overridden by setting InFile to point to a
  12423.     different file or device.
  12424.     
  12425.      Example:
  12426.        OutFile = 'OUTPUT.TXT'
  12427.        StandardIO
  12428.     
  12429.     See Also: InFile StandardIO
  12430.     
  12431.     Category: File
  12432.     
  12433.     
  12434.      OverKey : String
  12435.     
  12436.     When using UseArrows, OverKey returns the character that selects the
  12437.     item that the inverse bar is over.
  12438.     
  12439.     This can be used with IdleProgram to display context sensitive help as
  12440.     you move the inverse bar over different selections.
  12441.     
  12442.     See Also: IdleProgram
  12443.     
  12444.     Category: String
  12445.     
  12446.     
  12447.      OverLay (MenuName)
  12448.     
  12449.     Overlay loads another menu as if that menu were a procedure of the
  12450.     current menu. After the overlaid menu exits, control is returned to the
  12451.     calling menu at the next line after the overlay command.
  12452.     
  12453.     Like the Chain command, Overlay is very fast and doesn't require
  12454.     MarxMenu to be reloaded.
  12455.     
  12456.      Example:
  12457.        Overlay 'SUBMENU'
  12458.     
  12459.  
  12460.     Computer Tyme * MarxMenu * Users Manual                 Page #213
  12461.     -----------------------------------------------------------------
  12462.     
  12463.     When using overlays, all variables declared as shared are accessible to
  12464.     the main program and all overlays. The shared variables have to be the
  12465.     same for all overlays.
  12466.     
  12467.     See Also: Shared Chain
  12468.     
  12469.     Category: Execution
  12470.     
  12471.     
  12472.      Overlayed : Boolean
  12473.     
  12474.     Overalyed returns true if menu is loaded as an overlay.
  12475.     
  12476.     Category: Execution
  12477.     
  12478.     
  12479.      PadLeft (String,Length) : String
  12480.     
  12481.     PadLeft will return String filled with blanks on the left side so that
  12482.     the length of the string is Length.
  12483.     
  12484.      Example:
  12485.        Writeln PadLeft('123',5)   ;returns '  123'
  12486.     
  12487.     See Also: PadRight
  12488.     
  12489.     Category: String
  12490.     
  12491.     
  12492.      PadRight (String,Length) : String
  12493.     
  12494.     PadRight will return String filled with blanks on the right side so that
  12495.     the length of the string is Length.
  12496.     
  12497.      Example:
  12498.        Writeln PadRight('123',5)   ;returns '123  '
  12499.     
  12500.     See Also: PadLeft
  12501.     
  12502.     Category: String
  12503.     
  12504.     
  12505.      ParallelPorts : Number
  12506.     
  12507.     Returns number of parallel ports.
  12508.     
  12509.     Category: System
  12510.     
  12511.  
  12512.     Computer Tyme * MarxMenu * Users Manual                 Page #214
  12513.     -----------------------------------------------------------------
  12514.     
  12515.      ParamStr (Num) : String
  12516.     
  12517.     Returns the DOS parameter string from the command line. The 0 parameter
  12518.     is MARXMENU.EXE. The 1 parameter is the name of the menu file you are
  12519.     using. This is like the %1 %2 %3 ... in batch file parameters.
  12520.     
  12521.     Category: String
  12522.     
  12523.     
  12524.      ParentEnvironment
  12525.     
  12526.     ParentEnvironment selects the parent environment for use with
  12527.     environment access commands.
  12528.     
  12529.     See Also: ReadEnv SetEnv ReadEnvironment ShellEnvironment
  12530.     See Also: CurrentEnvironment MasterEnvironment
  12531.     
  12532.     Category: Environment
  12533.     
  12534.     
  12535.      Password (Pswd,column,row)
  12536.     
  12537.     This command opens up a password box at row and column. The user must
  12538.     type the password correctly before the command will execute.
  12539.     
  12540.      Example:
  12541.        OnKey 'X'
  12542.           |PassWord('shell',4,3)
  12543.           COMMAND.COM
  12544.     
  12545.     The password is case sensitive if the password in the source code is
  12546.     lower case. But if the password in the source code is in uppercase then
  12547.     the password is not case sensitive.
  12548.     
  12549.      Example:
  12550.        Password 'CRITTER' 4 3    ;will accept critter or CRITTER
  12551.        Password 'CriTTeR' 4 3    ;will only accept CriTTeR
  12552.     
  12553.     Category: Conditional
  12554.     
  12555.     
  12556.      PathPart (String) : String
  12557.     
  12558.     Returns the path part of a filename.
  12559.     
  12560.      Example:
  12561.        PathPart ('C:\MARX\MARXMENU.EXE') ;returns C:\MARX
  12562.     
  12563.     See Also: Extension NamePart FilePart
  12564.     
  12565.     Category: String
  12566.     
  12567.  
  12568.     Computer Tyme * MarxMenu * Users Manual                 Page #215
  12569.     -----------------------------------------------------------------
  12570.     
  12571.      PauseAfterExecute (On/Off)
  12572.     
  12573.     If on, this command causes the message "Press any key to return to
  12574.     MarxMenu..." to appear after an execute command is executed.
  12575.     
  12576.     See Also: Execute
  12577.     
  12578.     Category: Execution
  12579.     
  12580.     
  12581.      PcType : String
  12582.     
  12583.     PcType returns the type of computer you are running as a string.
  12584.     
  12585.       Types: PC, XT, AT, PS2.
  12586.     
  12587.     Category: System
  12588.     
  12589.     
  12590.      Pi : Real
  12591.     
  12592.     Returns the value of Pi to 18 digits.
  12593.     
  12594.     Category: Math Float
  12595.     
  12596.     
  12597.      PickFile (FileSpec,column,row,height) : String
  12598.     
  12599.     Allows you to display a directory of files on the screen from a menu.
  12600.     Normally used to display a list of files for the user to choose from.
  12601.     Could be used in a command to load a word processor or database. Allows
  12602.     selection of the file to be loaded by the word processor or database
  12603.     program. The filename can be passed to a percent variable placed in the
  12604.     batch file executing the application. See example files on MarxMenu
  12605.     distribution disk.
  12606.     
  12607.      Example:
  12608.        FileName = PickFile('C:\WORDSTAR\*.DOC',3,4,17)
  12609.     
  12610.     Notice: The use of a variable with a name that starts with a '%' allows
  12611.     the choice to be passed to a batch file for execution.
  12612.     
  12613.     The three numbers represent the column and row of the upper left corner
  12614.     of the box and the height of the box. All DrawBox commands can be used
  12615.     here to control the looks of the PickFile window. This includes the
  12616.     BoxHeader command.
  12617.     
  12618.     Category: String
  12619.     
  12620.  
  12621.     Computer Tyme * MarxMenu * Users Manual                 Page #216
  12622.     -----------------------------------------------------------------
  12623.     
  12624.      PickMany(SourceArray,DestinationArray)
  12625.     
  12626.     PickMany displays a string array in the current window and allows you to
  12627.     choose as many lines as you want. The chosen lines go into
  12628.     DestinationArray.
  12629.     
  12630.     When the window appears, the space bar toggles the marked status of the
  12631.     line. The right arrow sets the marked status and the left arrow resets
  12632.     the marked status. Ctrl-Right-Arrow marks all lines, Ctrl-Left-Arrow
  12633.     unmarks all lines. The return key accepts the selection and exits. The
  12634.     ESC key aborts.
  12635.     
  12636.     If using a mouse, the left button toggles the mark on the current line.
  12637.     The right button accepts and exits.
  12638.     
  12639.     If no selections are made by marking selections then pressing Return on
  12640.     an entry selects the item the cursor bar is over. If ESC is pressed,
  12641.     the DestinationArray is left unchanged. You can test LastKey to see what
  12642.     was pressed.
  12643.     
  12644.      Example:
  12645.        ;PICK&DEL.MNU      Usage "MARXMENU PICK&DEL mask"
  12646.        ;
  12647.        var temp,work,hitlist
  12648.        boxheader "PICK&DEL: A MarxMenu Demo"
  12649.        boxfooter "Space=Mark, <Enter>=DoIt"
  12650.        drawbox 25,5,30,15
  12651.        readdirectory(cmdline,work)     ;Read Dir into Array work
  12652.        pickmany(work,hitlist)          ;Use PickMany to select files!
  12653.        boxheader "Deleting Files"
  12654.        drawbox 20,10,40,4
  12655.        loop hitlist
  12656.           writeln " Now Deleting File: " hitlist[loopindex]
  12657.           delfile hitlist[loopindex]
  12658.           wait (10)
  12659.        endloop
  12660.        erasetopwindow
  12661.        erasetopwindow
  12662.     
  12663.     See Also: PickManyPositions PickOne
  12664.     
  12665.     Category: String Array
  12666.     
  12667.  
  12668.     Computer Tyme * MarxMenu * Users Manual                 Page #217
  12669.     -----------------------------------------------------------------
  12670.     
  12671.      PickManyPositions (Array)
  12672.     
  12673.     After running PickMany an array PickManyPositions is created that has
  12674.     the position numbers in the original array that were chosen.
  12675.     
  12676.     See Also: PickMany
  12677.     
  12678.     Category: String Array
  12679.     
  12680.     
  12681.      PickOne (Array) : String
  12682.     
  12683.     This command displays an array in the current window and lets you pick a
  12684.     line and returns the chosen line.
  12685.     
  12686.      Example:
  12687.        var BatFiles, BatName
  12688.        ReadDirectory('*.BAT',BatFiles)
  12689.        DrawBox 35 10 20 9
  12690.        BatName = PickOne(BatFiles)
  12691.     
  12692.     See Also: PickMany PickPosition
  12693.     
  12694.     Category: String Array
  12695.     
  12696.     
  12697.      PickPosition : Number
  12698.     
  12699.     The variable PickPosition works with the PickOne command. PickPosition
  12700.     returns the number of which element in the array was picked.
  12701.     
  12702.     See Also: PickOne
  12703.     
  12704.     Category: String Array
  12705.     
  12706.     
  12707.      Port (Number) : Number
  12708.     
  12709.     Returns the value at the port or writes a number to a port.
  12710.     
  12711.      Example:
  12712.        X = Port(20)   ;Reads port 20 into X
  12713.        Port(20) = X   ;Writes X to Port 20
  12714.     
  12715.     Category: Memory
  12716.     
  12717.  
  12718.     Computer Tyme * MarxMenu * Users Manual                 Page #218
  12719.     -----------------------------------------------------------------
  12720.     
  12721.      Pos (substring,string) : Number
  12722.     
  12723.     Finds position of substring in string. If substring isn't found, Pos
  12724.     returns 0.
  12725.     
  12726.      Example:
  12727.        pos('CD','ABCDE') returns 3
  12728.     
  12729.     Category: String
  12730.     
  12731.     
  12732.      PosInList (String,Array) : Number
  12733.     
  12734.     Scans a string array looking for a match on string and returns the array
  12735.     index of the first matched string if found or a zero if not found.
  12736.     
  12737.      Example:
  12738.        X[1] = 'JOE'
  12739.        X[2] = 'KEVIN'
  12740.        X[3] = 'MARC'
  12741.        Writeln PosInList('KEVIN',X)   ;returns 2
  12742.     
  12743.     See Also: PosInSortedList
  12744.     
  12745.     Category: Array
  12746.     
  12747.     
  12748.      PosInSortedList (String,Array) : Number
  12749.     
  12750.     Scans a string array looking for a match on string in a sorted array and
  12751.     returns the array index of the first matched string if found or a zero
  12752.     if not found. The array must be in sorted order. A binary search is used
  12753.     to make this command very fast.
  12754.     
  12755.      Example:
  12756.        X[1] = 'JOE'
  12757.        X[2] = 'KEVIN'
  12758.        X[3] = 'MARC'
  12759.        SortArray (X)
  12760.        Writeln PosInList('KEVIN',X)   ;returns 2
  12761.     
  12762.     See Also: PosInList
  12763.     
  12764.     Category: Array
  12765.     
  12766.  
  12767.     Computer Tyme * MarxMenu * Users Manual                 Page #219
  12768.     -----------------------------------------------------------------
  12769.     
  12770.      Power (Real,Real) : Real
  12771.     
  12772.     Raises a real to a given power.
  12773.     
  12774.      Example:
  12775.        Power(3,4)  ;returns 81.0
  12776.     
  12777.     Category: Math Float
  12778.     
  12779.     
  12780.      Pred (Number) : Number
  12781.     
  12782.     Returns number minus 1.
  12783.     
  12784.      Example:
  12785.        Pred(5)  ;returns 4
  12786.     
  12787.     See Also: Succ
  12788.     
  12789.     Category: Math
  12790.     
  12791.     
  12792.      Print (String)
  12793.     
  12794.     Prints string to the printer with no CR or LF. If there is an error
  12795.     printing, the error is returned in FileResult.
  12796.     
  12797.      Example:
  12798.        Print Char(12)  ;prints a form feed
  12799.     
  12800.     Category: Printer
  12801.     
  12802.     
  12803.      PrinterName (String)
  12804.     
  12805.     Sets the filename for the printer to use. The default name is PRN.
  12806.     Other common printer names include: LPT1, LPT2, LPT3, and AUX. You can
  12807.     also use filenames to direct printer output to a file.
  12808.     
  12809.     See Also: ClosePrinter OpenPrinter
  12810.     
  12811.     Category: Printer
  12812.     
  12813.     
  12814.      Println (String)
  12815.     
  12816.     Prints string to the printer with CR and LF.
  12817.     
  12818.     See Also: Print
  12819.     
  12820.     Category: Printer
  12821.     
  12822.  
  12823.     Computer Tyme * MarxMenu * Users Manual                 Page #220
  12824.     -----------------------------------------------------------------
  12825.     
  12826.      PrintScreen (On/Off)
  12827.     
  12828.     Turns the print screen function On and Off. Turning the print screen off
  12829.     disables the print screen key. This can be used to prevent a computer
  12830.     from locking up when the user hits the Print Screen key with no printer
  12831.     attached.
  12832.     
  12833.      Example:
  12834.        PrintScreen Off
  12835.     
  12836.     Category: Printer
  12837.     
  12838.     
  12839.      Procedure (name)
  12840.     
  12841.     This word begins the definition of a procedure. A procedure is like a
  12842.     subroutine. Once the procedure is defined, all you have to do to call
  12843.     the procedure is use its name. The procedure definition is terminated by
  12844.     the command EndProc.
  12845.     
  12846.      Example:
  12847.        Procedure SelectFile
  12848.           BoxHeaderColor ForeColor BackColor
  12849.           BoxBorderColor Cyan Mag
  12850.           BoxInsideColor Yellow Mag
  12851.           InverseColor Yellow Red
  12852.           Return PickFile (FileType,4,5,17)
  12853.        EndProc
  12854.     
  12855.     Whenever we use the word SelectFile in the menu, all the lines of the
  12856.     procedure SelectFile will execute.
  12857.     
  12858.     Parameters can be passed to procedures. When a parameter is passed it is
  12859.     normally passed by value. This mean that a copy of the original is
  12860.     passed. Whatever you do to the copy doesn't affect the original value.
  12861.     
  12862.      Example:
  12863.        var A
  12864.        Procedure Square (X)
  12865.           X = X * X
  12866.           Writeln X
  12867.        EndProc
  12868.     
  12869.        A = 6
  12870.        Square (A)   ;prints 36
  12871.        Writeln A    ;prints 6
  12872.     
  12873.     In the above example Square (A) will write 36 but Writeln A will write
  12874.     6. The reason is that Square passes a copy of A to X but the value of X
  12875.     is not returned to A. If you want the original A to be affected you
  12876.     would use the Loc command.
  12877.     
  12878.  
  12879.     Computer Tyme * MarxMenu * Users Manual                 Page #221
  12880.     -----------------------------------------------------------------
  12881.     
  12882.      A = 6
  12883.      Square (Loc A) ;prints 36
  12884.      Writeln A      ;prints 36
  12885.     
  12886.     In this example we pass Loc A to the Square procedure. Thus, instead of X
  12887.     being set to 6, X is set to point to A. As a pointer, any operation
  12888.     performed on X is performed on A instead.
  12889.     
  12890.     You can also return parameters from procedures using the Return command.
  12891.     
  12892.      Example:
  12893.        Procedure Cube (X)
  12894.           Return X * X * X
  12895.        EndProc
  12896.     
  12897.        Writeln Cube(3)    ;returns 27
  12898.     
  12899.     In MarxMenu you can return any number of parameters as long as the
  12900.     calling procedure is expecting the same number of parameters.
  12901.     
  12902.      Example:
  12903.        Procedure CenterOfScreen
  12904.           Return (ScreenWidth / 2) (ScreenHeight / 2)
  12905.        EndProc
  12906.     
  12907.        GotoXY(CenterOfScreen)
  12908.     
  12909.     In the above example, GotoXY expects two parameters. CenterOfScreen
  12910.     returns two parameters so MarxMenu is happy with it.
  12911.     
  12912.     See Also: EndProc Return Loc
  12913.     
  12914.     Category: Misc
  12915.     
  12916.     
  12917.      PullMenu (On/Off)
  12918.     
  12919.     Controls the behavior of the left and right arrow keys when using
  12920.     pull-down menus. Default is Off. See PULL.MNU for example.
  12921.     
  12922.     Category: Display
  12923.     
  12924.     
  12925.      Qualifier
  12926.     
  12927.     Used to create qualifiers which are named elements of an array.
  12928.     
  12929.      Example:
  12930.        Var President
  12931.        Qualifier FirstName, LastName
  12932.     
  12933.  
  12934.     Computer Tyme * MarxMenu * Users Manual                 Page #222
  12935.     -----------------------------------------------------------------
  12936.     
  12937.        President.FirstName = 'George'
  12938.        President.LastName  = 'Washington'
  12939.     
  12940.     See Also: Var Constant Shared
  12941.     
  12942.     Category: Variable
  12943.     
  12944.     
  12945.      QualVal (Qualifier) : Number
  12946.     
  12947.     Returns the numeric value of a qualifier.
  12948.     
  12949.      Example:
  12950.         Qualifier A B C
  12951.         Writeln QualVal C    ;returns 3
  12952.     
  12953.     See Also: Qualifier
  12954.     
  12955.     Category: Variable
  12956.     
  12957.     
  12958.      Random : Number
  12959.     
  12960.     The Random command returns random numbers between 0 and +2,147,483,647.
  12961.     (2^31). The algorithm has been checked for good uniformity and takes
  12962.     advantage of re-seeding itself from random events like the timer
  12963.     interrupt and keyboard input.
  12964.     
  12965.     To get a random number in a specific range, use the Mod command.
  12966.     
  12967.      Example:
  12968.        Write 'Pick a Number from 1 to 10 '
  12969.        Writeln (Random mod 10 + 1)
  12970.     
  12971.     Category: Math
  12972.     
  12973.     
  12974.      ReadAscTextFile (FileName,2D Array)
  12975.     
  12976.     ReadAscTextFile reads a standard comma delimited text file into a
  12977.     2-dimensional array. The lines of the file must be limited to 1000
  12978.     characters and the number of lines must be less than 13100. It also has
  12979.     to fit in memory.
  12980.     
  12981.     All text in quotes is converted to strings. Numbers not in quotes are
  12982.     translated as numbers unless there is a '.' in which case they are
  12983.     translated as floating point numbers.
  12984.     
  12985.     See Also: ReadlnAsc
  12986.     
  12987.     Category: File Array
  12988.     
  12989.  
  12990.     Computer Tyme * MarxMenu * Users Manual                 Page #223
  12991.     -----------------------------------------------------------------
  12992.     
  12993.      ReadDirectory (Path,Array)
  12994.     
  12995.     Reads a directory into an array. This command is controlled by several
  12996.     variables that control its behavior.
  12997.     
  12998.     If WholeFileNames is set to true, the names that are returned contain
  12999.     the whole path. If HiddenAndSystem is set to true, then Hidden and
  13000.     System files are also read. If IncludeDirectories is set to true, then
  13001.     directories are also read.
  13002.     
  13003.     If DirectoriesOnly is set to true, then only directory names are read.
  13004.     
  13005.      Example:
  13006.        Var X
  13007.        WholeFileNames Off
  13008.        ReadDirectory('*.MNU',X)
  13009.        Loop X
  13010.           Execute ('COPY ' + X[LoopIndex] + ' A:')
  13011.        EndLoop
  13012.     
  13013.     Here's a recursive example where we use ReadDirectory to read all the
  13014.     directories on the current drive.
  13015.     
  13016.      StandardIO
  13017.      DirectoriesOnly
  13018.      WholeFileNames
  13019.     
  13020.      ReadSubdirectories(CleanFileName('\'))
  13021.     
  13022.      Procedure ReadSubdirectories (Dir)
  13023.      var Subs
  13024.         Writeln Dir
  13025.         ReadDirectory(Dir,Subs)
  13026.         Loop Subs
  13027.            ReadSubdirectories(Subs[LoopIndex])
  13028.         EndLoop
  13029.      EndProc
  13030.     
  13031.     See Also: WholeFileNames HiddenAndSystem IncludeDirectories
  13032.     See Also: DirectoriesOnly ReadSqDirectory
  13033.     
  13034.     Category: Array Directory
  13035.     
  13036.  
  13037.     Computer Tyme * MarxMenu * Users Manual                 Page #224
  13038.     -----------------------------------------------------------------
  13039.     
  13040.      ReadEnv (String) : String
  13041.     
  13042.     Returns the environment string specified.
  13043.     
  13044.      Example:
  13045.        PathString = ReadEnv('PATH')
  13046.     
  13047.     You can also read environment strings by enclosing the environment
  13048.     variable name in '%' like you do in batch files.
  13049.     
  13050.      Example:
  13051.        PathString = %PATH%
  13052.     
  13053.     See Also: SetEnv ReadEnvironment ShellEnvironment
  13054.     See Also: CurrentEnvironment ParentEnvironment MasterEnvironment
  13055.     
  13056.     Category: Environment
  13057.     
  13058.     
  13059.      ReadEnvironment (Array)
  13060.     
  13061.     Reads all environment variables into an array. The variable LongestLine
  13062.     is set to the length of the longest environment variable.
  13063.     
  13064.      Example:
  13065.        Var Env
  13066.        ReadEnvironment (Env)
  13067.        Writeln 'Your current environment variables are:'
  13068.        Loop Env
  13069.           Writeln Env[LoopIndex]
  13070.        EndLoop
  13071.        Writeln
  13072.        Writeln('Your Environment Size is ',Str(EnvSize))
  13073.        Writeln('You are using ',Str(EnvSize-EnvFree),' bytes.')
  13074.        Writeln('You have ',Str(EnvFree),' bytes free.')
  13075.     
  13076.     See Also: SetEnv ReadEnv ShellEnvironment
  13077.     See Also: CurrentEnvironment ParentEnvironment MasterEnvironment
  13078.     
  13079.     Category: Environment Array
  13080.     
  13081.     
  13082.      ReadFileBlock (Name,Offset,Size,Segment)
  13083.     
  13084.     ReadFileBlock reads disk file Name starting at byte Offset for Size
  13085.     bytes into memory buffer Segment. It is intended to read any kind of
  13086.     file.
  13087.     
  13088.     The maximum value for Size is 65504. The segment must be as large as the
  13089.     number of bytes you are reading. The following example will copy a small
  13090.     file.
  13091.     
  13092.  
  13093.     Computer Tyme * MarxMenu * Users Manual                 Page #225
  13094.     -----------------------------------------------------------------
  13095.     
  13096.      Example:
  13097.        Var RamBlock Size
  13098.        Size = FileSize 'MARXREAD.ME'
  13099.        RamBlock = GetMem(Size)
  13100.        ReadFileBlock('MARXREAD.ME' 0 Size RamBlock)
  13101.        WriteFileBlock('COPYREAD.ME' 0 Size RamBlock)
  13102.        FreeMem(RamBlock)
  13103.     
  13104.     See Also: WriteFileBlock GetMem FreeMem
  13105.     
  13106.     Category: File Memory
  13107.     
  13108.     
  13109.      ReadKey : String
  13110.     
  13111.     Returns the character that is input from the keyboard. If UseArrows is
  13112.     on then the inverse bar will appear in the current window for selecting
  13113.     a choice.
  13114.     
  13115.      Example:
  13116.        Var Key
  13117.     
  13118.        Repeat
  13119.          Writeln( 'Press the <ESC> key to exit this program.' )
  13120.          Key = ReadKey
  13121.        Until Key = Esc
  13122.     
  13123.     See Also: UseArrows UpperCaseOnly
  13124.     
  13125.     Category: Keyboard
  13126.     
  13127.     
  13128.      Readln : String
  13129.     
  13130.     Reads a string from the keyboard. By default the size of the string is
  13131.     from the cursor position to one space left of the right side of the
  13132.     current window. The size can be set to a smaller value using the
  13133.     InputLength command.
  13134.     
  13135.     InputString can be set to preload the string with a value for editing.
  13136.     UppercaseOnly can be set to force the string be entered in uppercase.
  13137.     
  13138.      Example:
  13139.        Name   = Readln
  13140.        Number = Value (Readln) ;Converts to an numerical value
  13141.        State  = UpperCase (ReadLn)
  13142.     
  13143.     See Also: InputString UpperCaseOnly InsertMode InputLength
  13144.     See Also: TrimInputString InputBlankChar CapsOnly Security
  13145.     See Also: NumericOnly CapFirstChar FullLineReturn
  13146.     
  13147.  
  13148.     Computer Tyme * MarxMenu * Users Manual                 Page #226
  13149.     -----------------------------------------------------------------
  13150.     
  13151.     Category: Keyboard String
  13152.     
  13153.     
  13154.      ReadlnAsc (File,Array)
  13155.     
  13156.     ReadlnAsc reads a single line from a comma delimited Ascii file and
  13157.     breaks the fields out into an array.
  13158.     
  13159.     All fields in quotes are considered strings. If the field is just comma
  13160.     delimited and numeric then it is converted to a number. If it has a
  13161.     decimal point then it is converted to a real number.
  13162.     
  13163.      Example:
  13164.        var F Fields
  13165.        FileAssign(F,'TEST.ASC')
  13166.        FileOpen(F)
  13167.        while not EndOfFile(F)
  13168.           ReadlnAsc(F,Fields)
  13169.           loop Fields
  13170.              Write Fields[LoopIndex] ' '
  13171.           endloop
  13172.           Writeln
  13173.        EndWhile
  13174.     
  13175.     See Also: ReadAscTextFile
  13176.     
  13177.     Category: File
  13178.     
  13179.     
  13180.      ReadSqDirectory (Path,2DArray)
  13181.     
  13182.     ReadSqDirectory works like ReadDirectory but rather than just returning
  13183.     the file name it returns all the information about the file in a 2
  13184.     dimensional array.  The fields of the array are as follows:
  13185.     
  13186.      1 - Name
  13187.      2 - Date last Updated
  13188.      3 - Size
  13189.      4 - Attributes
  13190.     
  13191.     Under Netware there are several other fields:
  13192.     
  13193.      5 - Date Created
  13194.      6 - Date last Accessed
  13195.      7 - Date last Archived
  13196.      8 - Owner
  13197.      9 - Maximum Rights Mask (Directories)
  13198.     
  13199.      Example:
  13200.        Var X Y
  13201.        ReadSqDirectory('*.EXE',X)
  13202.        Writeln 'Listing File Name, Date Last Accessed, and Size.'
  13203.        Loop X
  13204.           Y = LoopIndex
  13205.           Writeln X[Y,1] ' ' DateString(X[Y,6]) ' ' X[Y,3]
  13206.        EndLoop
  13207.     
  13208.  
  13209.     Computer Tyme * MarxMenu * Users Manual                 Page #227
  13210.     -----------------------------------------------------------------
  13211.     
  13212.     See Also: WholeFileNames HiddenAndSystem IncludeDirectories
  13213.     See Also: DirectoriesOnly ReadDirectory
  13214.     
  13215.     Category: Array Directory
  13216.     
  13217.     
  13218.      ReadTextFile (FileName,Array)
  13219.     
  13220.     This command reads a text file into a string array. It also sets the
  13221.     variable LongestLine to the length of the longest line in the file.
  13222.     
  13223.      Example:
  13224.        Var Docs
  13225.     
  13226.        ReadTextFile('MARXMENU.DOC',Docs)
  13227.          ;After the read, Docs[1] becomes the first line of the file.
  13228.          ;Docs[NumberOfElements(Docs)] becomes the last line.
  13229.        Loop NumberOfElements(Docs)
  13230.            ; Convert each line to its uppercase equivalent
  13231.          Docs[LoopIndex] = UpperCase Docs[LoopIndex]
  13232.        EndLoop
  13233.          ;Save the newly formatted array
  13234.        WriteTextFile ('NEWMM.DOC',Docs)
  13235.     
  13236.     Do not use FileOpen with ReadTextFile.
  13237.     
  13238.     The power of the ReadTextFile and WriteTextFile have expanded. You can
  13239.     now load and save arrays of any variable types, multidimensional arrays,
  13240.     and mixed array types. This includes strings, numbers, and booleans.
  13241.     File variables are also stored. When a file variable is stored and
  13242.     reloaded the FileAssign command is not necessary.
  13243.     
  13244.     See Also: LongestLine
  13245.     
  13246.     Category: File Array
  13247.     
  13248.     
  13249.      Real (Integer) : Real
  13250.     
  13251.     Returns the real equivalent of an integer.
  13252.     
  13253.      Example:
  13254.        Real(5)  ;returns 5.0
  13255.     
  13256.     See Also: Integer
  13257.     
  13258.     Category: Math Float
  13259.     
  13260.  
  13261.     Computer Tyme * MarxMenu * Users Manual                 Page #228
  13262.     -----------------------------------------------------------------
  13263.     
  13264.      Reboot
  13265.     
  13266.     Causes the computer to do a warm reboot.
  13267.     
  13268.     See Also: ColdBoot
  13269.     
  13270.     Category: Execution
  13271.     
  13272.     
  13273.      ReleaseDate : String
  13274.     
  13275.     Returns the MarxMenu Release Date.
  13276.     
  13277.     Category: String
  13278.     
  13279.     
  13280.      Repeat
  13281.     
  13282.     Used for program control. Usage:
  13283.     
  13284.      REPEAT
  13285.         (statement)
  13286.         (statement)
  13287.      UNTIL (condition)
  13288.     
  13289.      Example:
  13290.        Var Key
  13291.     
  13292.        Repeat
  13293.          Key = ReadKey
  13294.          If Key = 'A'
  13295.            Bat( 'DOLIST.EXE' )
  13296.            ExitMenu
  13297.          EndIf
  13298.          If Key = F1 Then Help
  13299.        Until Key = Esc
  13300.     
  13301.     Category: Conditional
  13302.     
  13303.     
  13304.      ResizeWindow (Horizontal Vertical)
  13305.     
  13306.     Changes the size of the top window. The horizontal and vertical numbers
  13307.     are added to the current size. Use negative numbers to shrink the
  13308.     window. The top left corner stays in the same place.
  13309.     
  13310.      Example:
  13311.        DrawBox 15 5 30 15
  13312.        ResizeWindow 15 5
  13313.     
  13314.     See Also: MoveWindow
  13315.     
  13316.  
  13317.     Computer Tyme * MarxMenu * Users Manual                 Page #229
  13318.     -----------------------------------------------------------------
  13319.     
  13320.     Category: Display
  13321.     
  13322.     
  13323.      Return (param,param,...)
  13324.     
  13325.     Exits a procedure and optionally returns parameters to the calling
  13326.     procedure. It can return as many parameters as you want as long as the
  13327.     calling program uses the same number of parameters. Otherwise, you will
  13328.     get an "Invalid number of parameters" error.
  13329.     
  13330.      Example:
  13331.        Procedure SmallRandomNumber
  13332.        {Returns a random number between 1 and 100}
  13333.        var SmallRand
  13334.           SmallRand = Random mod 100
  13335.           Return (SmallRand + 1)
  13336.        EndProc
  13337.     
  13338.     See Also: Procedure EndProc
  13339.     
  13340.     Category: Misc
  13341.     
  13342.     
  13343.      ReturnCode : Number
  13344.     
  13345.     When you use the Execute function, a ReturnCode value is fed into this
  13346.     variable when you return to the menu. The code returned is the same as
  13347.     what the DOS ErrorLevel would be. This will not work if you use the
  13348.     UseCommand On function because COMMAND.COM would have been loaded and
  13349.     the returncode would be lost.
  13350.     
  13351.     You also have to specify the COM or EXE extension or else MarxMenu will
  13352.     use COMMAND.COM and the return code will be lost.
  13353.     
  13354.      Example:
  13355.        Execute 'INMEM.EXE SK'
  13356.        if ReturnCode = 0 then Writeln 'Sidekick not Loaded!'
  13357.     
  13358.     See Also: ExitCode
  13359.     
  13360.     Category: Execution
  13361.     
  13362.     
  13363.      Right (string,count) : String
  13364.     
  13365.     Returns right characters of string for length count.
  13366.     
  13367.      Example:
  13368.        Right('ABCDEF',3) returns 'DEF'
  13369.     
  13370.     Category: String
  13371.     
  13372.  
  13373.     Computer Tyme * MarxMenu * Users Manual                 Page #230
  13374.     -----------------------------------------------------------------
  13375.     
  13376.      RmDir (String)
  13377.     
  13378.     Removes a directory. The FileResult variable returns the DOS result
  13379.     error code. A zero in FileResult indicates success. You can't remove a
  13380.     directory that contains files or other directories.
  13381.     
  13382.      Example:
  13383.        RmDir 'C:\NETUTILS'
  13384.     
  13385.     See Also: ChDir MkDir
  13386.     
  13387.     Category: Directory
  13388.     
  13389.     
  13390.      RollWindow (Number)
  13391.     
  13392.     Windows can be looked at as a stack. RollWindow will roll a previous
  13393.     window to the top of the stack making the previous window the current
  13394.     window.
  13395.     
  13396.      Example:
  13397.          ;Make the third window on the stack the active window
  13398.        RollWindow 3
  13399.          ;Write out message
  13400.        Writeln 'You have mail waiting!'
  13401.          ;Now put the windows back
  13402.        PushBackWindow (3)
  13403.     
  13404.        Procedure PushBackWindow (N)
  13405.     
  13406.        ;Will roll a window back to its original position on the stack
  13407.        ;The parameter should be the same as the parameter for the call
  13408.        ;to RollWindow. If you use RollWindow(3) then use PushBackWindow(3)
  13409.     
  13410.          Loop N
  13411.            RollWindow N
  13412.          EndLoop
  13413.        EndProc ;PushBackWindow
  13414.     
  13415.     See Also: CurrentWindow SetTopWindow
  13416.     
  13417.     Category: Display
  13418.     
  13419.     
  13420.      Run variable (parameters)
  13421.     
  13422.     This runs a procedure that was stored in a variable.
  13423.     
  13424.      Example:
  13425.      var Y
  13426.     
  13427.  
  13428.     Computer Tyme * MarxMenu * Users Manual                 Page #231
  13429.     -----------------------------------------------------------------
  13430.     
  13431.      Procedure WriteSquared (X)
  13432.         Writeln (X * X)
  13433.      EndProc
  13434.     
  13435.      Y = Loc WriteSquared
  13436.      Run Y(3)   ; This will write a 9 on the screen
  13437.     
  13438.     Warning! Don't put the variable you are running in parentheses.
  13439.     
  13440.         Run (Y,3)  ; this won't work
  13441.     
  13442.     See Also: Loc
  13443.     
  13444.     Category: Misc
  13445.     
  13446.     
  13447.      SavePosition (On/Off)
  13448.     
  13449.     If SavePosition is On, MarxMenu will return to the last menu selection
  13450.     you made when MarxMenu is re-entered. As you select menu layers your
  13451.     keystrokes are stored in an internal string variable called KeySave. On
  13452.     exit, MarxMenu writes KeySave to an environment variable KSV. On return
  13453.     to MarxMenu, this variable is retrieved. The return point may be altered
  13454.     by using the command KeySave = (String).
  13455.     
  13456.     Another thing this points out is that environment variables can be used
  13457.     to store information and allow MarxMenu to remember things from one
  13458.     selection to another. Since MarxMenu doesn't stay memory resident, this
  13459.     is the only way I have found to store information.
  13460.     
  13461.     Category: Keyboard Environment
  13462.     
  13463.     
  13464.      ScreenHeight : Number
  13465.     
  13466.     Returns number of rows of character on your screen. Normally this is 25.
  13467.     
  13468.     Category: Video
  13469.     
  13470.     
  13471.      ScreenWidth : Number
  13472.     
  13473.     Returns number of columns of character on your screen. Normally this is
  13474.     80.
  13475.     
  13476.     Category: Video
  13477.     
  13478.  
  13479.     Computer Tyme * MarxMenu * Users Manual                 Page #232
  13480.     -----------------------------------------------------------------
  13481.     
  13482.      ScrollLock : Boolean
  13483.     
  13484.     Returns true if Scroll Lock is on. This command can also set the Scroll
  13485.     Lock on and off.
  13486.     
  13487.      Example:
  13488.        if ScrollLock then Write 'ScrollLock is On'
  13489.     
  13490.        ScrollLock On  ;Turns ScrollLock On
  13491.        ScrollLock Off ;Turns ScrollLock Off
  13492.     
  13493.        ScrollLock (by itself) turns ScrollLock On.
  13494.     
  13495.        To test for ScrollLock:
  13496.        if ScrollLock
  13497.           <do something>
  13498.        endif
  13499.     
  13500.     See Also: CapsLock NumLock
  13501.     
  13502.     Category: System
  13503.     
  13504.     
  13505.      ScrollMove (On/Off)
  13506.     
  13507.     This allows you to control whether or not the ScrollLock will allow you
  13508.     to move the top window. Default is On.
  13509.     
  13510.      Example:
  13511.        ScrollMove Off
  13512.     
  13513.     Category: Display
  13514.     
  13515.     
  13516.      Second : Number
  13517.     
  13518.     Returns the current second.
  13519.     
  13520.     Category: Time
  13521.     
  13522.     
  13523.      SecondOf (Date) : Number
  13524.     
  13525.     Returns the second of a date. If Date is passed as a string it is
  13526.     converted automatically.
  13527.     
  13528.      Example:
  13529.        SecondOf '6:32:23'  ;returns 23
  13530.     
  13531.     See Also: TimeOf BadDate
  13532.     
  13533.  
  13534.     Computer Tyme * MarxMenu * Users Manual                 Page #233
  13535.     -----------------------------------------------------------------
  13536.     
  13537.     Category: Time
  13538.     
  13539.     
  13540.      Security (On/Off)
  13541.     
  13542.     When security is on, Readln echos '*' instead of the letters that are
  13543.     being typed. This is used for such things as entering passwords other
  13544.     than using the password command.
  13545.     
  13546.      Example:
  13547.        Security On
  13548.     
  13549.     See Also: Readln
  13550.     
  13551.     Category: String
  13552.     
  13553.     
  13554.      Segment (String) : Number
  13555.     
  13556.     Returns the memory segment where string is located.
  13557.     
  13558.     See Also: Offset
  13559.     
  13560.     Category: Memory
  13561.     
  13562.     
  13563.      SelectPath : String
  13564.     
  13565.     This command uses another program in the Computer Tyme DOS TOOLBOX
  13566.     called Pick Directory to read a text into a variable. You must have
  13567.     Computer Tyme Pick Directory for this feature to work.
  13568.     
  13569.      Example:
  13570.        OnKey 'B'
  13571.        |%BackPath = SelectPath
  13572.        cd %BackPath
  13573.        backup c: a:
  13574.     
  13575.     Category: Directory
  13576.     
  13577.     
  13578.      SerialNumber
  13579.     
  13580.     This returns your MarxMenu serial number in a numeric variable. If you
  13581.     are using an unregistered evaluation version of MarxMenu the result is
  13582.     (0)-Zero.
  13583.     
  13584.      Example:
  13585.        if SerialNumber <> 0
  13586.             writeln "My MarxMenu serial number is: " SerialNumber
  13587.        else
  13588.             writeln "This is an unregistered MarxMenu, no serial number."
  13589.        endif
  13590.     
  13591.  
  13592.     Computer Tyme * MarxMenu * Users Manual                 Page #234
  13593.     -----------------------------------------------------------------
  13594.     
  13595.      SerialPorts : Number
  13596.     
  13597.     Returns number of serial ports.
  13598.     
  13599.     Category: System
  13600.     
  13601.     
  13602.      Set [Value,Value,Value,Value]
  13603.     
  13604.     Set is used to define an array made up of specific values.
  13605.     
  13606.      Example:
  13607.        X = Set[2,3,5,7] ;Variable X becomes an array containing 2 3 5 and 7.
  13608.     
  13609.     Category: Array
  13610.     
  13611.     
  13612.      SetArraySize (Array,Size)
  13613.     
  13614.     If the array is larger than Size the array is truncated. If it is
  13615.     smaller, memory is allocated for the array.
  13616.     
  13617.     Category: Array
  13618.     
  13619.     
  13620.      SetEnv (String)
  13621.     
  13622.     This is used to set environment strings. It can be used on the Current,
  13623.     Parent, Master or Shell environment.
  13624.     
  13625.      Example:
  13626.        SetEnv ('PATH=C:\')
  13627.        SetEnv ('COMSPEC=X:COMMAND.COM')
  13628.     
  13629.     You can also set the environment by using '%' on each side of the
  13630.     environment variable.
  13631.     
  13632.      Example:
  13633.        %PATH% = 'C:\'
  13634.        %COMSPEC% = 'O:\COMMAND.COM'
  13635.     
  13636.     MarxMenu also allows you to select which environment you are working
  13637.     with. This is done with the following commands.
  13638.     
  13639.      CurrentEnvironment
  13640.      ParentEnvironment
  13641.      MasterEnvironment
  13642.      ShellEnvironment   (default)
  13643.     
  13644.     See Also: ReadEnv ReadEnvironment ShellEnvironment
  13645.     See Also: CurrentEnvironment ParentEnvironment MasterEnvironment
  13646.     
  13647.  
  13648.     Computer Tyme * MarxMenu * Users Manual                 Page #235
  13649.     -----------------------------------------------------------------
  13650.     
  13651.     Category: Environment
  13652.     
  13653.     
  13654.      SetTimerTask (Loc Procedure,Ticks)
  13655.     
  13656.     SetTimerTask allows for background multitasking or real time events. The
  13657.     Ticks parameter specifies how often the task will run in clock ticks
  13658.     (18.2 times a second). If 6 ticks are specified then the task will run
  13659.     every 6 clock ticks or about 3 times a second. This command can be used
  13660.     to run scheduled events as well as periodic events.
  13661.     
  13662.      Example:
  13663.        SetTimerTask(Loc BlinkColor,9)
  13664.     
  13665.        Procedure BlinkColor
  13666.           gotoxy 5 5
  13667.           textcolor white (random mod 7)+1
  13668.           writeln " * Colors Change * "
  13669.        EndProc
  13670.     
  13671.     Category: Event
  13672.     
  13673.     
  13674.      SetTopWindow (Number)
  13675.     
  13676.     Selects a window by number making it the current window and moves it to
  13677.     the top.
  13678.     
  13679.      Example:
  13680.        DrawBox ....
  13681.        ThisWindow = CurrentWindow
  13682.        DrawBox ....
  13683.        DrawBox ....
  13684.        SetTopWindow (ThisWindow)
  13685.     
  13686.     See Also: CurrentWindow RollWindow SetWindowUnder
  13687.     
  13688.     Category: Display
  13689.     
  13690.     
  13691.      SetWindowUnder (Window1,Window2)
  13692.     
  13693.     This command moves Window1 underneath Window2. This can be used to put a
  13694.     window back in the stack after you use SetTopWindow.
  13695.     
  13696.      Example:
  13697.        SetWindowUnder (StatusWindow,StatusWindow + 1)
  13698.     
  13699.     See Also: CurrentWindow SetTopWindow RollWindow
  13700.     
  13701.     Category: Display
  13702.     
  13703.  
  13704.     Computer Tyme * MarxMenu * Users Manual                 Page #236
  13705.     -----------------------------------------------------------------
  13706.     
  13707.      Shadow (On/Off)
  13708.     
  13709.     Turn window shadows On/Off.
  13710.     
  13711.      Example:
  13712.        Shadow On
  13713.     
  13714.     Category: Display
  13715.     
  13716.     
  13717.      ShadowColor (Foreground,Background)
  13718.     
  13719.     Sets the color of the shadow. There are actually two shadow colors.
  13720.     MarxMenu stores different values for big shadows and small shadows.
  13721.     
  13722.     See Also: BigShadow SmallShadow ShadowPosition Shadow
  13723.     
  13724.     Category: Color
  13725.     
  13726.     
  13727.      ShadowPosition (Number)
  13728.     
  13729.     Selects the shadow position around the window. A zero (default) sets the
  13730.     shadow position to the bottom right side. A one sets the shadow position
  13731.     to the bottom left. Using ShadowPosition turns shadowing on so a Shadow
  13732.     On command is not required.
  13733.     
  13734.      Example:
  13735.        ShadowPosition 1
  13736.     
  13737.     See Also: Shadow ShadowColor BigShadow SmallShadow
  13738.     
  13739.     Category: Display
  13740.     
  13741.     
  13742.      Shared
  13743.     
  13744.     The key word SHARED can be used to define variables just like VAR. Any
  13745.     variable defined with SHARED is passed globally to and from overlays.
  13746.     
  13747.     The important thing is that the Shared variables must be defined exactly
  13748.     the same way between the overlays. There is also a predefined variable
  13749.     called COMMON. Technically, Shared variables are qualifiers off of
  13750.     COMMON.
  13751.     
  13752.      Example:
  13753.        Shared Var1 Var2 Var3
  13754.     
  13755.     See Also: Var Constant Qualifier
  13756.     
  13757.     Category: Variable
  13758.     
  13759.  
  13760.     Computer Tyme * MarxMenu * Users Manual                 Page #237
  13761.     -----------------------------------------------------------------
  13762.     
  13763.      ShellEnvironment
  13764.     
  13765.     ShellEnvironment selects the environment of the last COMMAND.COM in
  13766.     memory for use with environment access commands. This is usually the
  13767.     same as the Master Environment.
  13768.     
  13769.     More than one COMMAND.COM is loaded when you are running a shell under
  13770.     Windows or DesqView. When using these programs, you will want to access
  13771.     the Shell Environment instead of the Master Environment. The Shell
  13772.     Environment is the one that will run batch files.
  13773.     
  13774.     See Also: ReadEnv SetEnv ReadEnvironment MasterEnvironment
  13775.     See Also: CurrentEnvironment ParentEnvironment
  13776.     
  13777.     Category: Environment
  13778.     
  13779.     
  13780.      Shl : Operator
  13781.     
  13782.     Shift left, does a binary 32 bit shift left.
  13783.     
  13784.      Example:
  13785.        Writeln 5 Shl 2  ;returns 20
  13786.     
  13787.     See Also: Shr
  13788.     
  13789.     Category: Math
  13790.     
  13791.     
  13792.      Shr : Operator
  13793.     
  13794.     Shift right, does a binary 32 bit shift right.
  13795.     
  13796.      Example:
  13797.        Writeln 20 Shr 2  ;returns 5
  13798.     
  13799.     See Also: Shl
  13800.     
  13801.     Category: Math
  13802.     
  13803.     
  13804.      Sin (Radians) : Real
  13805.     
  13806.     Returns the Sine of a real.
  13807.     
  13808.     Category: Math Float
  13809.     
  13810.  
  13811.     Computer Tyme * MarxMenu * Users Manual                 Page #238
  13812.     -----------------------------------------------------------------
  13813.     
  13814.      SingleLineBox
  13815.     
  13816.     Selects single line box for menu borders.
  13817.     
  13818.     See Also: DoubleLineBox BlockBox CustomBox NoBoxBorder
  13819.     
  13820.     Category: Display
  13821.     
  13822.     
  13823.      SmallShadow
  13824.     
  13825.     Selects small shadow type.
  13826.     
  13827.     See Also: BigShadow ShadowPosition ShadowColor
  13828.     
  13829.     Category: Display
  13830.     
  13831.     
  13832.      SortArray (Array)
  13833.     
  13834.     SortArray will do an alphabetical sort on an array of strings.
  13835.     
  13836.      Example:
  13837.        Sort a Text File:
  13838.     
  13839.        Usage: DIR|MARXMENU SORT|MORE
  13840.               MARXMENU SORT INFILE OUTFILE
  13841.     
  13842.        SORT.MNU
  13843.          var SortBuf
  13844.          StandardIO
  13845.          ReadTextFile  (ParamStr(2),SortBuf)
  13846.          SortArray(SortBuf)
  13847.          WriteTextFile (ParamStr(3),SortBuf)
  13848.     
  13849.     Category: Array
  13850.     
  13851.     
  13852.      SortArrayLinked Array,KeyArray
  13853.     
  13854.     SortArrayLinked will sort an array based upon the contents of a key
  13855.     array.
  13856.     
  13857.      Example:
  13858.        var NumberArray,key
  13859.     
  13860.        writeln "Array sequential on element 1"
  13861.     
  13862.        loop 10
  13863.             NumberArray[loopindex,1]=loopindex
  13864.             NumberArray[loopindex,2]=(random mod 50 + 1)
  13865.             writeln NumberArray[loopindex,1] "   " NumberArray[loopindex,2]
  13866.        endloop
  13867.     
  13868.  
  13869.     Computer Tyme * MarxMenu * Users Manual                 Page #239
  13870.     -----------------------------------------------------------------
  13871.     
  13872.        MatrixInvert NumberArray
  13873.        key = NumberArray[2]
  13874.        matrixinvert NumberArray
  13875.        sortarraylinked NumberArray,key
  13876.     
  13877.        writeln "Array now sorted based on element 2"
  13878.     
  13879.        loop 10
  13880.             writeln NumberArray[loopindex,1] "   " NumberArray[loopindex,2]
  13881.        endloop
  13882.     
  13883.     See Also: MatrixInvert
  13884.     
  13885.     Category: Array
  13886.     
  13887.     
  13888.      Sound (On/Off)
  13889.     
  13890.     Turn sound effects On/Off.
  13891.     
  13892.     Category: Display
  13893.     
  13894.     
  13895.      SplitPath (Array)
  13896.     
  13897.     SplitPath reads the PATH environment variable and splits it up into an
  13898.     array of strings that are directories the path is made up of. All
  13899.     directory names are capitalized.
  13900.     
  13901.      Example:
  13902.        var P
  13903.        SplitPath P
  13904.        Loop P
  13905.           Writeln P[LoopIndex]   ;writes the directories in PATH
  13906.        EndLoop
  13907.     
  13908.     See Also: BuildPath FixPath
  13909.     
  13910.     Category: String Array Environment
  13911.     
  13912.     
  13913.      SpxFreeConnections : Number
  13914.     
  13915.     Returns the number of free SPX connections.
  13916.     
  13917.     Category: Novell
  13918.     
  13919.  
  13920.     Computer Tyme * MarxMenu * Users Manual                 Page #240
  13921.     -----------------------------------------------------------------
  13922.     
  13923.      IpxLoaded : Boolean
  13924.     
  13925.     Returns True if SPX is loaded
  13926.     
  13927.     Category: Novell
  13928.     
  13929.     
  13930.      SpxMaxConnections : Number
  13931.     
  13932.     Returns the maximum number of SPX connections allowed.
  13933.     
  13934.     Category: Novell
  13935.     
  13936.     
  13937.      Sqr (Real) : Real
  13938.     
  13939.     Returns the Square Root of a real.
  13940.     
  13941.     Category: Math Float
  13942.     
  13943.     
  13944.      StandardIO (On/Off)
  13945.     
  13946.     This tells MarxMenu to use standard Input and Output file handles for
  13947.     reading the keyboard and writing to the screen when turned On. When
  13948.     turned Off, MarxMenu does direct screen writes. When StandardIO is on,
  13949.     several MarxMenu commands will send ANSI escape sequences. The commands
  13950.     that send ANSI sequences are as follows:
  13951.     
  13952.      TextColor
  13953.      TextBackground
  13954.      ClearScreen
  13955.      ClearLine
  13956.      GotoXY
  13957.     
  13958.     The input and output can be redirected by using the InFile and OutFile
  13959.     variables.
  13960.     
  13961.     See Also: InFile OutFile
  13962.     
  13963.     Category: Display Ansi
  13964.     
  13965.     
  13966.      Str (Number) : String
  13967.     
  13968.     Returns a string value from a numeric variable.
  13969.     
  13970.      Example:
  13971.        writeln "*"+Str(6 * 5)+"*"  ;returns the string '*30*'
  13972.     
  13973.     See Also: Value
  13974.     
  13975.  
  13976.     Computer Tyme * MarxMenu * Users Manual                 Page #241
  13977.     -----------------------------------------------------------------
  13978.     
  13979.     Category: String
  13980.     
  13981.     
  13982.      StuffAKey (String or Number)
  13983.     
  13984.     Stuffs a single key into the DOS keyboard buffer when MarxMenu exits.
  13985.     The limit is 16 characters.
  13986.     
  13987.      Example:
  13988.        StuffAKey($3F00) ;stuff the F5 key
  13989.        StuffAKey F5     ;same thing
  13990.     
  13991.     Do not mix StuffAKey with StuffKBD. Use one or the other.
  13992.     
  13993.     Category: Execution Keyboard String
  13994.     
  13995.     
  13996.      StuffKBD (String)
  13997.     
  13998.     Stuffs the string into the DOS keyboard buffer when MarxMenu exits. The
  13999.     limit is 16 characters.
  14000.     
  14001.      Example:
  14002.        StuffKBD 'LOGOUT' + CR
  14003.     
  14004.     Category: Execution Keyboard String
  14005.     
  14006.     
  14007.      StuffKeyboardNow
  14008.     
  14009.     Normally the keyboard stuffing is done as MarxMenu quits. This forces
  14010.     the keyboard to be stuffed immediately.
  14011.     
  14012.     Category: Keyboard
  14013.     
  14014.     
  14015.      Succ (Number) : Number
  14016.     
  14017.     Returns number plus 1.
  14018.     
  14019.      Example:
  14020.        Succ(4)  ;returns 5
  14021.     
  14022.     See Also: Pred
  14023.     
  14024.     Category: Math
  14025.     
  14026.  
  14027.     Computer Tyme * MarxMenu * Users Manual                 Page #242
  14028.     -----------------------------------------------------------------
  14029.     
  14030.      Suggest (Char)
  14031.     
  14032.     Normally the UseArrows command will start in the upper left-hand corner.
  14033.     By using the Suggest command, you can set it to start on any menu
  14034.     selection.
  14035.     
  14036.      Example:
  14037.        Suggest 'E'
  14038.     
  14039.     Category: Display
  14040.     
  14041.     
  14042.      TaskNumber : Number
  14043.     
  14044.     Reads the current task number. If running DesqView or Software Carousel,
  14045.     this is set to the window number. If running TaskMax this is set to the
  14046.     TaskID. If running in a DOS session under Windows it is set to the
  14047.     virtual machine number It can also be set by setting the TASK=
  14048.     environment variable.
  14049.     
  14050.     The TaskNumber is used to create unique batch files in an operating
  14051.     environment that supports multiple tasks so that temporary files from
  14052.     one task don't trash temporary files from another task when running
  14053.     MarxMenu more than once.
  14054.     
  14055.     Category: System
  14056.     
  14057.     
  14058.      TextBackground (color)
  14059.     
  14060.     Sets text background color.
  14061.     
  14062.      Example:
  14063.        TextBackground Blue
  14064.     
  14065.     Category: Color Ansi
  14066.     
  14067.     
  14068.      TextColor (Foreground,Background)
  14069.     
  14070.     Sets the color of text to be displayed on the screen. TextColor resets
  14071.     the value of CapsColor.
  14072.     
  14073.      Example:
  14074.        loop 16
  14075.             TextColor loopindex,Brown
  14076.             Writeln "This is a test"
  14077.        endloop
  14078.     
  14079.     Category: Color Ansi
  14080.     
  14081.  
  14082.     Computer Tyme * MarxMenu * Users Manual                 Page #243
  14083.     -----------------------------------------------------------------
  14084.     
  14085.      TextMode (num)
  14086.     
  14087.     Sets the video text mode.
  14088.     
  14089.      0 = 40 column BW
  14090.      1 = 40 column COLOR
  14091.      2 = 80 column BW
  14092.      3 = 80 column COLOR
  14093.      7 = Mono
  14094.      258 = 43/50 line EGA BW
  14095.      259 = 43/50 line EGA COLOR
  14096.     
  14097.      Example:
  14098.        TextMode BW80
  14099.     
  14100.     Category: Video
  14101.     
  14102.     
  14103.      TextPos : Number
  14104.     
  14105.     TextPos returns the current position in a text file. This can be saved
  14106.     so that you can go to the same place using TextSeek.
  14107.     
  14108.     See Also: TextSeek
  14109.     
  14110.     Category: File
  14111.     
  14112.     
  14113.      TextSeek (Number)
  14114.     
  14115.     TextSeek moves to a specific byte in a text file.
  14116.     
  14117.     See Also: TextPos
  14118.     
  14119.     Category: File
  14120.     
  14121.     
  14122.      Then
  14123.     
  14124.     Conditional control.
  14125.     
  14126.      Example:
  14127.        if <condition> then <do something>
  14128.     
  14129.     See Also: If Else Endif ElseIf
  14130.     
  14131.     Category: Conditional
  14132.     
  14133.  
  14134.     Computer Tyme * MarxMenu * Users Manual                 Page #244
  14135.     -----------------------------------------------------------------
  14136.     
  14137.      TimeOf (String) : Number
  14138.     
  14139.     Converts a string representing a date to a time number. The number is
  14140.     the number of seconds since 01-01-80. Conversion follows international
  14141.     rules based on the country code.
  14142.     
  14143.      Examples:
  14144.        '4-7-91'                 ;04-07-1991 00:00:00
  14145.        'April 7th, 1991 4:35pm' ;04-07-1991 16:35:00
  14146.        '12:35:23a'              ;04-07-1991 00:35:23
  14147.        '3:15'                   ;04-07-1991 03:15:00
  14148.     
  14149.     If the string can't be converted, then BadDate is set to true.
  14150.     
  14151.     See Also: BadDate
  14152.     
  14153.     Category: International Time
  14154.     
  14155.     
  14156.      Timer : Number
  14157.     
  14158.     Returns the system timer 32 bit value that is set to 0 at midnight and
  14159.     is incremented 18.2 times a second.
  14160.     
  14161.     Category: Time
  14162.     
  14163.     
  14164.      TimeSeparator : String
  14165.     
  14166.     Returns the time separator character from the country information.
  14167.     
  14168.     See Also: DecimalSeparator DateSeparator CountryCode
  14169.     
  14170.     Category: International Time
  14171.     
  14172.     
  14173.      TimeString (Time) : String
  14174.     
  14175.     Returns the time as a string in HH:MM:SS format. 24 hour. If no
  14176.     parameter is passed, Now is assumed.
  14177.     
  14178.      Example:
  14179.        Writeln TimeString
  14180.           ;returns the time of Now as text
  14181.        Writeln TimeString (Now + (5 * SecondsInHour))
  14182.           ;returns the time of 5 hours from now as text
  14183.     
  14184.     Category: String Time
  14185.     
  14186.  
  14187.     Computer Tyme * MarxMenu * Users Manual                 Page #245
  14188.     -----------------------------------------------------------------
  14189.     
  14190.      TMaxActiveTasks : Number
  14191.     
  14192.     Returns the number of active tasks started under TaskMax.
  14193.     
  14194.     Category: TaskMax
  14195.     
  14196.     
  14197.      TMaxCreateTask (command string)
  14198.     
  14199.     TMaxCreateTask creates a new task and executes it. You pass it a command
  14200.     line just like you would use the EXECUTE program. Like the EXECUTE
  14201.     program, if you use the COM or EXE extension then you won't load a
  14202.     secondary COMMAND.COM and save yourself 5k of memory and gain some
  14203.     speed. When the program exits that task is cleared.
  14204.     
  14205.     The TaskID of the created task is returned in TMaxResult.
  14206.     
  14207.      Example:
  14208.        TMaxCreateTask 'DIR *.*'
  14209.     
  14210.     See Also: TMaxReturnCount TMaxResult
  14211.     
  14212.     Category: TaskMax
  14213.     
  14214.     
  14215.      TMaxCut (TaskID)
  14216.     
  14217.     Activates TaskMax data-cutting function.
  14218.     
  14219.     See Also: TMaxPaste TMaxGetPasteBuffer TMaxSetPasteBuffer
  14220.     
  14221.     Category: TaskMax
  14222.     
  14223.     
  14224.      TMaxDeleteTask (TaskID)
  14225.     
  14226.     Kills the task identified by TaskID.
  14227.     
  14228.     See Also: TMaxTaskOpenFiles
  14229.     
  14230.     Category: TaskMax
  14231.     
  14232.     
  14233.      TMaxDirectSwitching (On/Off)
  14234.     
  14235.     Turns On or Off the ability to use the direct switch keys without going
  14236.     through the task manager menu. Default is On. By setting it to Off the
  14237.     direct switch keys work normally. TaskMax sometimes conflicts with
  14238.     applications when direct switching is On.
  14239.     
  14240.      Example:
  14241.        TMaxdirectSwitching Off
  14242.     
  14243.  
  14244.     Computer Tyme * MarxMenu * Users Manual                 Page #246
  14245.     -----------------------------------------------------------------
  14246.     
  14247.     Category: TaskMax
  14248.     
  14249.     
  14250.      TMaxEMSMemLim (Number)
  14251.     
  14252.     This is a variable that can be either read or set to the maximum number
  14253.     of bytes of EMS memory that each task can have. This prevents one task
  14254.     from hogging up all the EMS. Setting this to 0 disables limiting.
  14255.     
  14256.      Example:
  14257.        TMaxEMSMemLim = 2000000   ;2 megs per task
  14258.        Writeln TMaxEMSLim
  14259.     
  14260.     Category: TaskMax
  14261.     
  14262.     
  14263.      TMaxGetPasteBuffer (Array)
  14264.     
  14265.     Reads the TaskMax paste buffer into an array of strings.
  14266.     
  14267.     See Also: TMaxCut TMaxPaste TMaxSetPasteBuffer
  14268.     
  14269.     Category: TaskMax
  14270.     
  14271.     
  14272.      TMaxInstalled : Boolean
  14273.     
  14274.     This function returns true if TaskMax is installed. Any other TaskMax
  14275.     command produces a run-time error if used when TaskMax is not installed.
  14276.     
  14277.      Example:
  14278.        if not TMaxInstalled
  14279.           Writeln 'This menu requires TaskMax to run!'
  14280.        endif
  14281.     
  14282.     Category: TaskMax
  14283.     
  14284.     
  14285.      TMaxMaxTasks : Number
  14286.     
  14287.     Returns the total number of tasks allowed by TaskMax. Default is 20.
  14288.     
  14289.     Category: TaskMax
  14290.     
  14291.     
  14292.      TMaxNameTask (Task,Name)
  14293.     
  14294.     Normally TaskMax automatically names tasks according to what program is
  14295.     running. TMaxNameTask allows you to override the default task name with
  14296.     a task name of your choosing. The name is limited to 8 characters,
  14297.     
  14298.      Example:
  14299.        TMaxNameTask (2,'MYNAME')   ;renames task 2
  14300.     
  14301.  
  14302.     Computer Tyme * MarxMenu * Users Manual                 Page #247
  14303.     -----------------------------------------------------------------
  14304.     
  14305.     Category: TaskMax
  14306.     
  14307.     
  14308.      TMaxPaste (TaskID)
  14309.     
  14310.     Activates TaskMax data pasting function.
  14311.     
  14312.     See Also: TMaxCut TMaxGetPasteBuffer TMaxSetPasteBuffer
  14313.     
  14314.     Category: TaskMax
  14315.     
  14316.     
  14317.      TMaxReadTaskInfo (2D Array)
  14318.     
  14319.     Reads the task information table into a 2-dimensional array where the
  14320.     first field is the task name and the second field is the TaskId number.
  14321.     The TaskID number is used by all TMax commands that act on a single task
  14322.     (TMaxDelete, TMaxSwitchTasks... ).
  14323.     
  14324.      Example:
  14325.        var Tasks
  14326.        TMaxReadTaskInfo(Tasks)
  14327.        Loop Tasks
  14328.           Writeln Tasks[LoopIndex,1] ' ' Tasks[LoopIndex,2]
  14329.        EndLoop
  14330.     
  14331.     Category: TaskMax
  14332.     
  14333.     
  14334.      TMaxResult : Number
  14335.     
  14336.     TMaxResult is a variable containing return information that other TMax
  14337.     command return or the result status of a TMax command.
  14338.     
  14339.     Category: TaskMax
  14340.     
  14341.     
  14342.      TMaxReturnCount
  14343.     
  14344.     This variable sets the number of timer ticks (18.2 ticks per second)
  14345.     that TMaxCreateTask will execute in a program before returning to the
  14346.     original program. If it is set to 0 it will stay in the original
  14347.     program. By setting TMaxReturnCount to a number other than 0 you can run
  14348.     a program for a few seconds and come back. This is used to preload tasks
  14349.     that you might later want to switch to.
  14350.     
  14351.       Example:
  14352.         TMaxReturnCount = 27      ;1.5 Seconds
  14353.         TMaxCreateTask 'DM3.EXE'  ;load a file manager
  14354.         TMaxReturnCount = 0       ;set back to 0 for normal usage
  14355.     
  14356.     See Also: TMaxCreateTask
  14357.     
  14358.  
  14359.     Computer Tyme * MarxMenu * Users Manual                 Page #248
  14360.     -----------------------------------------------------------------
  14361.     
  14362.     Category: TaskMax
  14363.     
  14364.     
  14365.      TMaxSetPasteBuffer (Array)
  14366.     
  14367.     Sets the TaskMax paste buffer to the strings in array.
  14368.     
  14369.     See Also: TMaxCut TMaxPaste TMaxGetPasteBuffer
  14370.     
  14371.     Category: TaskMax
  14372.     
  14373.     
  14374.      TMaxSwitchTasks (TaskID)
  14375.     
  14376.     Switches the current task out and selects the task identified be TaskID.
  14377.     
  14378.     Category: TaskMax
  14379.     
  14380.     
  14381.      TMaxSwitchToManager
  14382.     
  14383.     This command brings up the task manager the same way as if you had
  14384.     pressed the hot key.
  14385.     
  14386.     Category: TaskMax
  14387.     
  14388.     
  14389.      TMaxTakeOver (On/Off)
  14390.     
  14391.     This allows your MarxMenu program to become the task manager menu. When
  14392.     the user presses the hot key to pop up the task switching menu it will
  14393.     pop up your MarxMenu program instead. You can disable this by setting it
  14394.     to Off.
  14395.     
  14396.     Category: TaskMax
  14397.     
  14398.     
  14399.      TMaxTaskOpenFiles (TaskID) : Number
  14400.     
  14401.     Returns the number of open files a task has. You may want to test to see
  14402.     if a task that open files before deleting the task.
  14403.     
  14404.      Example:
  14405.        if TMaxTaskOpenFiles (3) > 0
  14406.           Writeln 'Task 3 has open files.'
  14407.        endif
  14408.     
  14409.     See Also: TMaxDeleteTask
  14410.     
  14411.     Category: TaskMax
  14412.     
  14413.  
  14414.     Computer Tyme * MarxMenu * Users Manual                 Page #249
  14415.     -----------------------------------------------------------------
  14416.     
  14417.      TMaxThisTask : Number
  14418.     
  14419.     Returns the TaskID of the current task.
  14420.     
  14421.     Category: TaskMax
  14422.     
  14423.     
  14424.      TMaxVersion : Number
  14425.     
  14426.     Returns the version number of TaskMax.
  14427.     
  14428.     Category: TaskMax
  14429.     
  14430.     
  14431.      Today : Date
  14432.     
  14433.     Returns the current day as a date. The date returned has the time set to
  14434.     midnight or 00:00:00. It can also be used to set the system date.
  14435.     
  14436.      Read the current day;
  14437.         X = Today
  14438.      Set the system clock:
  14439.         Today = TimeOf '08-19-91'
  14440.     
  14441.     See Also: Tomorrow Now
  14442.     
  14443.     Category: Time
  14444.     
  14445.     
  14446.      Tomorrow : Time
  14447.     
  14448.     Returns the time of the day after today at midnight.
  14449.     
  14450.     See Also: Today Now
  14451.     
  14452.     Category: Time
  14453.     
  14454.     
  14455.      Tone (Frequency,Duration)
  14456.     
  14457.     This command plays a note at Frequency cycles per second for a period of
  14458.     Duration 1/18 of a second. The reason it is in 1/18 seconds is because
  14459.     there is a standard interrupt that returns that time period. The IBM
  14460.     series computers are not music oriented machines so don't throw away
  14461.     your Compact Disk player.
  14462.     
  14463.     The maximum duration is 255 1/18 of a second. Normally, MarxMenu will
  14464.     create a break in between notes equal to 1/8 of the duration of the
  14465.     note. If you want to eliminate the break and create a 'slur' (music
  14466.     term), add 256 to the duration. This tells MarxMenu to connect the notes
  14467.     without a break.
  14468.     
  14469.  
  14470.     Computer Tyme * MarxMenu * Users Manual                 Page #250
  14471.     -----------------------------------------------------------------
  14472.     
  14473.     Category: Music
  14474.     
  14475.     
  14476.      TotalDiskSpace (Drive) : Number
  14477.     
  14478.     Returns total disk space in bytes.
  14479.     
  14480.      Example:
  14481.        Writeln (TotalDiskSpace 'C')
  14482.     
  14483.     TotalDiskSpace only looks at the first character of the string for
  14484.     the drive letter.
  14485.     
  14486.     Category: System
  14487.     
  14488.     
  14489.      TotalEMS : Number
  14490.     
  14491.     Returns total EMS memory in bytes.
  14492.     
  14493.      Example:
  14494.        Writeln TotalEMS
  14495.     
  14496.     Category: Memory
  14497.     
  14498.     
  14499.      Trim (String or Array)
  14500.     
  14501.     Trims white space from both ends of a string. White space is
  14502.     blank characters and lower.
  14503.     
  14504.      Example:
  14505.        St = ' ABC '
  14506.        Trim St        ;St now is 'ABC'
  14507.     
  14508.     When used with an array Trim removes blank lines from the beginning and
  14509.     end of the array. It doesn't trim the elements of the array.
  14510.     
  14511.     Category: String Array
  14512.     
  14513.     
  14514.      TrimInputString (On/Off)
  14515.     
  14516.     TrimInputString if set to On will cause blank characters to be trimmed
  14517.     from the front and tail of a string read from the keyboard with Readln.
  14518.     By default, TrimInputString is set to true.
  14519.     
  14520.     See Also: Readln
  14521.     
  14522.     Category: String
  14523.     
  14524.  
  14525.     Computer Tyme * MarxMenu * Users Manual                 Page #251
  14526.     -----------------------------------------------------------------
  14527.     
  14528.      TrueName (String) : String
  14529.     
  14530.     There is an undocumented feature of DOS called TRUENAME. It returns the
  14531.     real name of a file or directory looking past such things as drive
  14532.     mappings and Assigned or Substituted drives. On local drives you get the
  14533.     drive and path where the file really is. On networks you get server and
  14534.     volume information where the server name starts with a '\\'.
  14535.     
  14536.      Example:
  14537.        TrueName ('H:')  ;returns \\TYME\SYS\HOME\MARC
  14538.     
  14539.     See Also: CleanFileName
  14540.     
  14541.     Category: String File
  14542.     
  14543.     
  14544.      TSRs (Array)
  14545.     
  14546.     TSRs returns a list of all TSRs in memory as well as the names of
  14547.     pending batch files.
  14548.     
  14549.      Example:
  14550.        var TsrList
  14551.        TSRs(TsrList)
  14552.        Loop TsrList
  14553.           Writeln TsrList[LoopIndex]
  14554.        EndLoop
  14555.     
  14556.     See Also: InMem
  14557.     
  14558.     Category: Memory
  14559.     
  14560.     
  14561.      UnBlank : Boolean
  14562.     
  14563.     Unblank returns true if MarxMenu has determined that the screen blanker
  14564.     should finish. Your screen blanker needs to call UnBlank to determine
  14565.     when to unblank the screen.
  14566.     
  14567.      Example:
  14568.        while not UnBlank
  14569.           <your screen blanker>
  14570.        endwhile
  14571.     
  14572.     You can also set UnBlank to true when you want to UnBlank the screen.
  14573.     This can be used if you write your own screen blanker that is an
  14574.     external program.
  14575.     
  14576.     An example of writing your own screen blanker is included in the file
  14577.     WORM.INC.
  14578.     
  14579.  
  14580.     Computer Tyme * MarxMenu * Users Manual                 Page #252
  14581.     -----------------------------------------------------------------
  14582.     
  14583.      Example:
  14584.        Procedure MyBlanker
  14585.           Execute 'MYBLANK.EXE'
  14586.           UnBlank = True
  14587.        EndProc
  14588.     
  14589.     See Also: BlankScreenProgram
  14590.     
  14591.     Category: Display
  14592.     
  14593.     
  14594.      UniqueFileName : String
  14595.     
  14596.     Uses the create new file call to get a filename that is different than
  14597.     any other filename. It is tied to the DOS call that is used to create a
  14598.     unique filename according to the rules of your operating system.
  14599.     
  14600.     Category: File String
  14601.     
  14602.     
  14603.      Until
  14604.     
  14605.     Conditional control.
  14606.     
  14607.      Example:
  14608.        Repeat
  14609.           <statement>
  14610.           <statement>
  14611.        Until <condition>
  14612.     
  14613.     See Also: Repeat.
  14614.     
  14615.     Category: Conditional
  14616.     
  14617.     
  14618.      UpperCase (String) : String
  14619.     
  14620.     Return UpperCase of String including support for international
  14621.     characters.
  14622.     
  14623.      Example:
  14624.        Name = UpperCase(Name)
  14625.     
  14626.     See Also: LowerCase
  14627.     
  14628.     Category: String International
  14629.     
  14630.  
  14631.     Computer Tyme * MarxMenu * Users Manual                 Page #253
  14632.     -----------------------------------------------------------------
  14633.     
  14634.      UpperCaseOnly : Boolean
  14635.     
  14636.     Setting UpperCaseOnly to On forces text entered with Readln or ReadKey
  14637.     to upper case.
  14638.     
  14639.      Example:
  14640.        UpperCaseOnly On
  14641.     
  14642.     See Also: Readln
  14643.     
  14644.     Category: String
  14645.     
  14646.     
  14647.      UseArrows
  14648.     
  14649.     UseArrows tells MarxMenu that the selection will be made by moving an
  14650.     inverse video bar over the selections. No parameters are required for
  14651.     this command to work. It will pick the first line with a capital letter
  14652.     as the first menu selection. All text in the window must be indented at
  14653.     least one space and there must be one space between the end of the line
  14654.     and the right wall of the window. Multiple items on the same line must
  14655.     be separated by two or more spaces.
  14656.     
  14657.     The OnKey selection is triggered by either the first capital letter in
  14658.     the selection or by a number from 0 - 9 or some punctuation characters.
  14659.     This number or letter will be a different color if you use the CapsColor
  14660.     command. (See Also: PULL.MNU for an example).
  14661.     
  14662.     UseArrows Off will disable this feature.
  14663.     
  14664.     See Also: ReadKey
  14665.     
  14666.     Category: Display
  14667.     
  14668.     
  14669.      UseCommand (On/Off)
  14670.     
  14671.     Used with Execute. UseCommand will load COMMAND.COM before running the
  14672.     specified program. Its not as fast, because the system has to find and
  14673.     load COMMAND.COM, then the specified program. The advantage is if
  14674.     COMMAND.COM is loaded, it will allow you to run batch files and internal
  14675.     DOS commands. It also doesn't require you to specify the COM or EXE
  14676.     extension.
  14677.     
  14678.      Example:
  14679.        OnKey 'D'
  14680.        |UseCommand On
  14681.        |Execute 'DM'
  14682.     
  14683.     The default is Off.
  14684.     
  14685.  
  14686.     Computer Tyme * MarxMenu * Users Manual                 Page #254
  14687.     -----------------------------------------------------------------
  14688.     
  14689.     See Also: Execute
  14690.     
  14691.     Category: Execution
  14692.     
  14693.     
  14694.      UsedDiskSpace (Drive) : Number
  14695.     
  14696.     Returns used disk space in bytes.
  14697.     
  14698.      Example:
  14699.        Writeln (UsedDiskSpace 'C')
  14700.     
  14701.     UsedDiskSpace only looks at the first character of the string for the
  14702.     drive letter.
  14703.     
  14704.     Category: System
  14705.     
  14706.     
  14707.      UseNovPassword : Boolean
  14708.     
  14709.     If UseNovPassword is set to true then the screen blanker will require
  14710.     that the user type his Novell password to unblank the screen. Full
  14711.     Novell security and intruder detection is active here. If Novell's
  14712.     intruder detection is active, then if an intruder fails to type in the
  14713.     password after a number of attempts, then Netware will not accept the
  14714.     correct password until intruder detection allows it.
  14715.     
  14716.     If you don't know what intruder detection is, read the Netware manuals
  14717.     on the subject. It is something you should use.
  14718.     
  14719.     Category: Novell
  14720.     
  14721.     
  14722.      Value (String) : Number
  14723.     
  14724.     Converts String to Number. Leading $ indicates Hex.
  14725.     
  14726.      Example:
  14727.        Value '5'   ;returns 5
  14728.     
  14729.     See Also: Str
  14730.     
  14731.     Category: String Math Real
  14732.     
  14733.     
  14734.      Var
  14735.     
  14736.     In MarxMenu all variables must be declared before they can be
  14737.     referenced.  The VAR command is used to declare variables.
  14738.     
  14739.      Example:
  14740.        var X,Y,Z
  14741.        var
  14742.          X = 5
  14743.          Y = 6
  14744.     
  14745.  
  14746.     Computer Tyme * MarxMenu * Users Manual                 Page #255
  14747.     -----------------------------------------------------------------
  14748.     
  14749.     See Also: Constant Shared Qualifier
  14750.     
  14751.     Category: Variable
  14752.     
  14753.     
  14754.      VarType (Variable) : String
  14755.     
  14756.     VarType returns the type of data contained in a variable. Types returned
  14757.     include the following:
  14758.     
  14759.       NUL
  14760.       NUMBER
  14761.       REAL
  14762.       STRING
  14763.       ARRAY
  14764.       FILE
  14765.       POINTER
  14766.       PROCEDURE
  14767.       UNKNOWN
  14768.     
  14769.     Category: Variable
  14770.     
  14771.     
  14772.      VCPIInstalled : Boolean
  14773.     
  14774.     Returns True if VCPI services are installed.
  14775.     
  14776.     See Also: VCPIVersion
  14777.     
  14778.     Category: System
  14779.     
  14780.     
  14781.      VCPIVersion : String
  14782.     
  14783.     VCPIVersion returns the version of the VCPI driver you are using. If
  14784.     VCPI isn't present it returns an empty string.
  14785.     
  14786.     See Also: VCPIInstalled
  14787.     
  14788.     Category: System
  14789.     
  14790.     
  14791.      VideoMode : Number
  14792.     
  14793.     Returns Current Video Mode.
  14794.     
  14795.      Example:
  14796.        Writeln VideoMode
  14797.     
  14798.     Category: Video
  14799.     
  14800.  
  14801.     Computer Tyme * MarxMenu * Users Manual                 Page #256
  14802.     -----------------------------------------------------------------
  14803.     
  14804.      VideoPage : Number
  14805.     
  14806.     Returns Current Video Page.
  14807.     
  14808.     Category: Video
  14809.     
  14810.     
  14811.      ViewArray (Array)
  14812.     
  14813.     Allows you to view an array of strings in the current window. Works just
  14814.     like ViewTextFile.
  14815.     
  14816.      Example:
  14817.        var New
  14818.        ReadTextFile ('MARXREAD.ME',New)
  14819.        DrawBox 1 2 80 23
  14820.        ViewArray New
  14821.     
  14822.     See Also: ViewTextFile
  14823.     
  14824.     Category: Display Array
  14825.     
  14826.     
  14827.      ViewTextFile (Name)
  14828.     
  14829.     This command lets you view a text file in the current window.
  14830.     
  14831.      Example:
  14832.        DrawBox 1 2 80 23
  14833.        ViewTextFile 'MARXREAD.ME'
  14834.     
  14835.     See Also: ViewArrayFile
  14836.     
  14837.     Category: Display File
  14838.     
  14839.     
  14840.      VinCheckService (Service) : Number
  14841.     
  14842.     Returns information about the requested service.
  14843.     
  14844.      Services:
  14845.     
  14846.         1 - Communications
  14847.         2 - Primary 3270 Emulation ID
  14848.         3 - Async Terminal Emulation
  14849.         4 - File Deflection
  14850.         5 - BPS
  14851.         6 - Undocumented
  14852.         7 - StreetTalk
  14853.         8 - Environment
  14854.         9 - NetBios
  14855.        10 - Secondary 3270 Emulation ID
  14856.        11 - Semaphore
  14857.        12 - 3270 Emulation Active Status
  14858.        13 - 3270 Keyboard Interrupt Simulator
  14859.        14 - Advanced 3270 SNA
  14860.        15 - Undocumented
  14861.        16 - Undocumented
  14862.  
  14863.     Computer Tyme * MarxMenu * Users Manual                 Page #257
  14864.     -----------------------------------------------------------------
  14865.     
  14866.     
  14867.      Return Codes:
  14868.         0 - Service is Installed
  14869.         1 - Service is not Installed
  14870.         2 - Invalid Service Number
  14871.     
  14872.     Category: Vines
  14873.     
  14874.     
  14875.      VinesInt : Number
  14876.     
  14877.     Returns the interrupt number the Vines software is servicing.
  14878.     
  14879.     Category: Vines
  14880.     
  14881.     
  14882.      VinesLoaded : Boolean
  14883.     
  14884.     VinesLoaded returns true if the Vines shell is loaded.
  14885.     
  14886.     Category: Vines
  14887.     
  14888.     
  14889.      VinUserName : String
  14890.     
  14891.     Returns the StreetTalk name of the person who is logged in.
  14892.     
  14893.     Category: Vines
  14894.     
  14895.     
  14896.      VinSerialNumber (Drive) : Number
  14897.     
  14898.     Returns the Vines serial number on the server that the drive letter
  14899.     references.
  14900.     
  14901.      Example:
  14902.        Writeln VinSerialNumber ('Z')
  14903.     
  14904.     Category: Vines
  14905.     
  14906.     
  14907.      Volume (Drive)
  14908.     
  14909.     Returns the volume label of the specified drive.
  14910.     
  14911.      Example:
  14912.        Writeln Volume 'C'   ;volume label on drive C
  14913.     
  14914.     Category: System
  14915.     
  14916.  
  14917.     Computer Tyme * MarxMenu * Users Manual                 Page #258
  14918.     -----------------------------------------------------------------
  14919.     
  14920.      VT100mode (On/Off)
  14921.     
  14922.     There are some differeences between ANSI and VT100 codes. When VT100mode
  14923.     is on the AnsiWindows respond to VT100 sequences.
  14924.     
  14925.     See Also: AnsiWindows
  14926.     
  14927.     Category: Modem
  14928.     
  14929.     
  14930.      Wait (Number)
  14931.     
  14932.     Delay for a number of 1/100 seconds. Wait 250 delays 2 1/2 seconds.
  14933.     
  14934.     If you are running a multi-tasker like Windows 3 or DesqView, and the
  14935.     delay is over 1/4 second, MarxMenu will release time slices back to DOS
  14936.     and not bog down the CPU power on long waits. MarxMenu also releases CPU
  14937.     cycles while idle at the keyboard.
  14938.     
  14939.      Example:
  14940.        Wait 300   ;3 second delay
  14941.     
  14942.     See Also: WaitOrKbdReady
  14943.     
  14944.     Category: Misc
  14945.     
  14946.     
  14947.      WaitOrKbdReady (Number)
  14948.     
  14949.     This command is just like the WAIT command except the wait is aborted by
  14950.     pressing any key. Time to wait is in hundredths of a second. This
  14951.     command is useful when using MarxMenu to write a running demo.
  14952.     
  14953.      Example:
  14954.        WaitOrKbdReady 300   ;3 second delay or until KeyPress
  14955.     
  14956.     See Also: Wait
  14957.     
  14958.     Category: Keyboard
  14959.     
  14960.     
  14961.      WhereX : Number
  14962.     
  14963.     Returns the horizontal position of the cursor within the current window.
  14964.     
  14965.     Category: Display
  14966.     
  14967.  
  14968.     Computer Tyme * MarxMenu * Users Manual                 Page #259
  14969.     -----------------------------------------------------------------
  14970.     
  14971.      WhereXAbs : Number
  14972.     
  14973.     Returns the horizontal screen position of the cursor.
  14974.     
  14975.     Category: Display
  14976.     
  14977.     
  14978.      WhereY : Number
  14979.     
  14980.     Returns the vertical position of the cursor within the current window.
  14981.     
  14982.     
  14983.      WhereYAbs : Number
  14984.     
  14985.     Returns the vertical screen position of the cursor.
  14986.     
  14987.     Category: Display
  14988.     
  14989.     
  14990.      While
  14991.     
  14992.     Used for program control. Usage:
  14993.     
  14994.      WHILE (condition)
  14995.         (statement)
  14996.         (statement)
  14997.      ENDWHILE
  14998.     
  14999.     Execution stays in the while loop as long as the condition is true.
  15000.     
  15001.     See Also: EndWhile
  15002.     
  15003.     Category: Conditional
  15004.     
  15005.     
  15006.      WholeFileNames (On/Off)
  15007.     
  15008.     Controls if ReadDirectory will return the whole name and path or just
  15009.     the filename part.
  15010.     
  15011.      Example:
  15012.        Var X
  15013.        WholeFileNames Off          ;Just filename, no paths!
  15014.        ReadDirectory('*.MNU',X)
  15015.        Loop X
  15016.           Execute ('COPY ' + X[LoopIndex] + ' A:')
  15017.        EndLoop
  15018.     
  15019.     See Also: ReadDirectory
  15020.     
  15021.     Category: File Directory
  15022.     
  15023.  
  15024.     Computer Tyme * MarxMenu * Users Manual                 Page #260
  15025.     -----------------------------------------------------------------
  15026.     
  15027.      Window (X,Y,Width,Height)
  15028.     
  15029.     Window changes the size of the active area of the screen. It can be used
  15030.     to either reduce or expand where text can be written.
  15031.     
  15032.     See Also: DrawBox
  15033.     
  15034.     Category: Display
  15035.     
  15036.     
  15037.      WindowHeight : Number
  15038.     
  15039.     Returns number of rows in current window.
  15040.     
  15041.     Category: Display
  15042.     
  15043.     
  15044.      WindowWidth : Number
  15045.     
  15046.     Returns number of columns in current window.
  15047.     
  15048.     Category: Display
  15049.     
  15050.     
  15051.      WinX : Number
  15052.     
  15053.     Returns the horizontal location of the left hand corner of the window.
  15054.     
  15055.     See Also: WinY
  15056.     
  15057.     Category: Display
  15058.     
  15059.     
  15060.      WinY : Number
  15061.     
  15062.     Returns the vertical location of the left-hand corner of the window.
  15063.     
  15064.     See Also: WinX
  15065.     
  15066.     Category: Display
  15067.     
  15068.     
  15069.      Within (Start,End) : Boolean
  15070.     
  15071.     Within returns true if a value is within the range from Start to End.
  15072.     Within works with numbers and strings.
  15073.     
  15074.      Example:
  15075.        Within (Start,End) : Boolean
  15076.        Within returns True if a value is within the range from Start to End.
  15077.        Within works with numbers and strings.
  15078.     
  15079.      Example:
  15080.         if X within(5,7) then Write 'X is Within 5 to 7'
  15081.         if not (Ch within('A','Z')) Write 'Lower Case'
  15082.     
  15083.  
  15084.     Computer Tyme * MarxMenu * Users Manual                 Page #261
  15085.     -----------------------------------------------------------------
  15086.     
  15087.     Category: Misc
  15088.     
  15089.     
  15090.      WordStarKeys (On/Off)
  15091.     
  15092.     In the early days of MarxMenu I mapped many of the cursor movement keys
  15093.     to match the WordStar key strokes. Now you can turn this off to get the
  15094.     real scan codes from the arrow keys.
  15095.     
  15096.     See Also: Readln
  15097.     
  15098.     Category: String
  15099.     
  15100.     
  15101.      WorkString : String
  15102.     
  15103.     WorkString is a MarxMenu variable that contains the string that Readln
  15104.     is editing. This string can be accessed by KeyEvent routines so that a
  15105.     KeyEvent procedure can set what is being entered.
  15106.     
  15107.      Example:
  15108.        WorkString = PickOne(List)
  15109.     
  15110.     See Also: KeyEvent
  15111.     
  15112.     Category: String
  15113.     
  15114.     
  15115.      Write (String)
  15116.     
  15117.     Writes (String) on the screen at the current cursor position.
  15118.     
  15119.      Example:
  15120.        Write ' - Heading - '
  15121.     
  15122.     Category: Display
  15123.     
  15124.     
  15125.      WriteAscTextFile (File,2DArray)
  15126.     
  15127.     WriteAscTextFile writes a 2-dimensional array to a comma delimited
  15128.     ascii text file.
  15129.     
  15130.     Category: File
  15131.     
  15132.     
  15133.      WriteCenter (String)
  15134.     
  15135.     Writes (String) centered in current window.
  15136.     
  15137.     Category: Display
  15138.     
  15139.  
  15140.     Computer Tyme * MarxMenu * Users Manual                 Page #262
  15141.     -----------------------------------------------------------------
  15142.     
  15143.      WriteError (String)
  15144.     
  15145.     This command works just like Write except that it writes to the DOS
  15146.     error device handle. This can be used to put messages on the screen when
  15147.     the output is redirected to a file.
  15148.     
  15149.     See Also: WritelnError
  15150.     
  15151.     Category: Display
  15152.     
  15153.     
  15154.      WriteFileBlock (Name,Offset,Size,Segment)
  15155.     
  15156.     WriteFileBlock writes disk file Name starting at byte Offset for Size
  15157.     bytes from memory buffer Segment. It is intended to write any kind of
  15158.     file. If the file doesn't exist, it is created.
  15159.     
  15160.     The maximum value for Size is 65504. The segment must be as large as the
  15161.     number of bytes you are writing.
  15162.     
  15163.     See Also: ReadFileBlock GetMem FreeMem
  15164.     
  15165.     Category: File Memory
  15166.     
  15167.     
  15168.      Writeln (String)
  15169.     
  15170.     Writes (String) on the screen followed by a CR-LF (carriage
  15171.     return-line feed).
  15172.     
  15173.      Example:
  15174.        Writeln 'The time is: ' TimeString
  15175.     
  15176.     Category: Display
  15177.     
  15178.     
  15179.      WritelnAsc (File,Array)
  15180.     
  15181.     WritelnAsc writes one line to the end of a comma delimited ascii text
  15182.     file. Each element of the array becomes one field of that line.
  15183.     
  15184.      Example:
  15185.        var A
  15186.        A[1] = 'MARC PERKEL'
  15187.        A[2] = 'ONION'
  15188.        A[3] = 37
  15189.        WritelnAsc('TEST.TXT',A)
  15190.        ;appends "MARC PERKEL","ONION",37 to file TEST.TXT
  15191.     
  15192.     Category: File
  15193.     
  15194.  
  15195.     Computer Tyme * MarxMenu * Users Manual                 Page #263
  15196.     -----------------------------------------------------------------
  15197.     
  15198.      WritelnError (String)
  15199.     
  15200.     This command works just like Writeln except that it writes to the DOS
  15201.     error device handle. This can be used to put messages on the screen when
  15202.     the output is redirected to a file.
  15203.     
  15204.     See Also: WriteError
  15205.     
  15206.     Category: Display
  15207.     
  15208.     
  15209.      WriteTextFile (FileName,Array)
  15210.     
  15211.     This command writes a string array to a text file. Do not use FileCreate
  15212.     or any other file commands with this. This command does it all.
  15213.     
  15214.      Example:
  15215.        var X
  15216.        ReadTextFile('MARXREAD.ME',X)
  15217.        WriteTextFile('A:MARXREAD.ME',X)  ;copies file to A:
  15218.     
  15219.     See Also: ReadTextFile
  15220.     
  15221.     Category: File Array
  15222.     
  15223.     
  15224.      WriteVertical (String)
  15225.     
  15226.     Writes (String) vertically on the screen from the current cursor
  15227.     position.
  15228.     
  15229.      Example:
  15230.        WriteVertical( 'Hello' )
  15231.     
  15232.          ;This would display
  15233.            H
  15234.            e
  15235.            l
  15236.            l
  15237.            o
  15238.     
  15239.     Category: Display
  15240.     
  15241.     
  15242.      XmsInstalled : Boolean
  15243.     
  15244.     Returns True if XMS memory manager is installed.
  15245.     
  15246.     See Also: XmsVersion
  15247.     
  15248.     Category: System
  15249.     
  15250.  
  15251.     Computer Tyme * MarxMenu * Users Manual                 Page #264
  15252.     -----------------------------------------------------------------
  15253.     
  15254.      XmsVersion : String
  15255.     
  15256.     XmsVersion returns the version of the XMS driver you are using. If XMS
  15257.     isn't present it returns an empty string.
  15258.     
  15259.     See Also: XmsInstalled
  15260.     
  15261.     Category: System
  15262.     
  15263.     
  15264.      Xor : Operator
  15265.     
  15266.     Returns logical Xor if operators are boolean; or bitwise Xor if
  15267.     operators are numeric.
  15268.     
  15269.     Xor (exclusive or) means one or the other but not both can be true.
  15270.     
  15271.      Example:
  15272.        A = True
  15273.        B = False
  15274.        A Xor B    ;returns true
  15275.     
  15276.     See Also: And Or Not
  15277.     
  15278.     Category: Math Boolean
  15279.     
  15280.     
  15281.      Year : Number
  15282.     
  15283.     Returns current Year.
  15284.     
  15285.      Example:
  15286.        Writeln Year    ;returns 1993
  15287.     
  15288.     Category: Time
  15289.     
  15290.     
  15291.      YearOf (Date) : Number
  15292.     
  15293.     Returns the year of a date. If Date is passed as a string it is
  15294.     converted automatically.
  15295.     
  15296.      Example:
  15297.        Writeln YearOf Today    ;returns 1993
  15298.     
  15299.     See Also: TimeOf BadDate
  15300.     
  15301.     Category: Time
  15302.     
  15303.  
  15304.     Computer Tyme * MarxMenu * Users Manual                 Page #265
  15305.     -----------------------------------------------------------------
  15306.     
  15307.      STRING CONSTANTS
  15308.     
  15309.        F1   = #0#59   SF1  = #0#84   CF1  = #0#94   AF1  = #0#104
  15310.        F2   = #0#60   SF2  = #0#85   CF2  = #0#95   AF2  = #0#105
  15311.        F3   = #0#61   SF3  = #0#86   CF3  = #0#96   AF3  = #0#106
  15312.        F4   = #0#62   SF4  = #0#87   CF4  = #0#97   AF4  = #0#107
  15313.        F5   = #0#63   SF5  = #0#88   CF5  = #0#98   AF5  = #0#108
  15314.        F6   = #0#64   SF6  = #0#89   CF6  = #0#99   AF6  = #0#109
  15315.        F7   = #0#65   SF7  = #0#90   CF7  = #0#100  AF7  = #0#110
  15316.        F8   = #0#66   SF8  = #0#91   CF8  = #0#101  AF8  = #0#111
  15317.        F9   = #0#67   SF9  = #0#92   CF9  = #0#102  AF9  = #0#112
  15318.        F10  = #0#68   SF10 = #0#93   CF10 = #0#103  AF10 = #0#113
  15319.        F11  = #0#133  SF11 = #0#135  CF11 = #0#137  AF11 = #0#139
  15320.        F12  = #0#134  SF12 = #0#136  CF12 = #0#138  AF12 = #0#140
  15321.     
  15322.        ALT1 = #0#120  BKSP = #8
  15323.        ALT2 = #0#121  CR   = #13
  15324.        ALT3 = #0#122  CRLF = #13#10
  15325.        ALT4 = #0#123  ESC  = #27
  15326.        ALT5 = #0#124  FF   = #12
  15327.        ALT6 = #0#125  LF   = #10
  15328.        ALT7 = #0#126
  15329.        ALT8 = #0#127
  15330.        ALT9 = #0#128
  15331.        ALT0 = #0#129
  15332.     
  15333.        Key              Scan     WordStar
  15334.        ----------------------------------
  15335.        UpArrow        = #0#72    ^E
  15336.        DownArrow      = #0#80    ^X
  15337.        LeftArrow      = #0#75    ^S
  15338.        RightArrow     = #0#77    ^D
  15339.        HomeKey        = #0#71    ^W
  15340.        EndKey         = #0#79    ^Z
  15341.        CtrlLeftArrow  = #0#115   ^A
  15342.        CtrlRightArrow = #0#116   ^F
  15343.        PgUpKey        = #0#73    ^R
  15344.        PgDnKey        = #0#81    ^C
  15345.        InsKey         = #0#82    ^V
  15346.        DelKey         = #0#83    ^G
  15347.     
  15348.     Category: Constants
  15349.     
  15350.  
  15351.     Computer Tyme * MarxMenu * Users Manual                 Page #266
  15352.     -----------------------------------------------------------------
  15353.     
  15354.      TIME AND DATE CONSTANTS
  15355.     
  15356.        Jan = 1        Sun = 0
  15357.        Feb = 2        Mon = 1
  15358.        Mar = 3        Tue = 2
  15359.        Apr = 4        Wed = 3
  15360.        May = 5        Thu = 4
  15361.        Jun = 6        Fri = 5
  15362.        Jul = 7        Sat = 6
  15363.        Aug = 8
  15364.        Sep = 9        SecondsInHour = 3600
  15365.        Oct = 10       SecondsInDay  = 86400
  15366.        Nov = 11
  15367.        Dec = 12
  15368.     
  15369.     Category: Constants
  15370.     
  15371.     
  15372.      VIDEO CONSTANTS
  15373.     
  15374.      Video Modes:   Display Types:
  15375.     
  15376.        BW40 = 0       0 = HercMono
  15377.        CO40 = 1       1 = CGA
  15378.        BW80 = 2       2 = MCGA
  15379.        CO50 = 3       3 = EGA
  15380.        MONO = 7       4 = VGA
  15381.     
  15382.     Category: Constants
  15383.     
  15384.     
  15385.      COLOR CONSTANTS
  15386.     
  15387.        Black   = 0    DGrey    = 8
  15388.        Blue    = 1    LBlue    = 9
  15389.        Green   = 2    LGreen   = 10
  15390.        Cyan    = 3    LCyan    = 11
  15391.        Red     = 4    LRed     = 12
  15392.        Magenta = 5    LMagenta = 13
  15393.        Brown   = 6    Yellow   = 14
  15394.        Grey    = 7    White    = 15
  15395.     
  15396.     Category: Constants
  15397.     
  15398.     
  15399.      BOOLEAN CONSTANTS
  15400.     
  15401.        True    Yes    On
  15402.        False   No     Off
  15403.     
  15404.     Category: Constants
  15405.     
  15406.  
  15407.     Computer Tyme * MarxMenu * Users Manual                 Page #267
  15408.     -----------------------------------------------------------------
  15409.     
  15410.